gpt4 book ai didi

ruby - 如何运行 capybara 命令一次,然后运行一些测试

转载 作者:行者123 更新时间:2023-11-28 20:32:40 25 4
gpt4 key购买 nike

我有给定的测试代码:


describe 'A new user', js: true do
before do
@new_user = Fabricate.build(:user)
end

it 'should sign up' do
#login code
visit '/'
click_link 'Login'
fill_in 'user[email]', :with => @new_user.email
fill_in 'user[password]', :with => @new_user.password
click_button 'Login now'
#login code end

page.should have_content("Hello #{@new_user.first_name}!")
current_path.should == dashboard_path
end

it 'should receive a confirmation mail' do
#same login code again
visit '/'
click_link 'Login'
fill_in 'user[email]', :with => @new_user.email
fill_in 'user[password]', :with => @new_user.password
click_button 'Login now'

mail = ActionMailer::Base.deliveries.last
assert_equal @new_user.email, mail['to'].to_s
end
end

现在我想添加更多测试。为避免代码重复,如何在所有测试之前运行一次 capybara 登录代码?一种解决方案是将登录代码放在 before 方法中。另一种方法是创建一个方法 do_login,将代码放入其中并像这样运行每个测试:

it 'should do something after login' do
do_login
#test code here
end

但是对于这两种解决方案,代码都会针对每个测试运行,这不是我想要的。将登录代码放在 before(:all) 中也不起作用。

我怎样才能运行一些 capybara 代码,然后再进行所有测试?

最佳答案

您不能运行 capybara 代码一次然后运行所有测试。你总是从头开始。您提出的使用 before(:each) 或 helper 方法的解决方案是唯一的可能性。 (可以在(:全部)之前运行一些 ruby​​,例如在事务之外创建对象 check here 但不是 Capybara)

为了加快您的规范,您可以在单独的规范中测试登录功能,然后以某种方式对身份验证进行 stub ,但这取决于您的实现。

如果您使用的是 Devise,请检查 devise wiki:https://github.com/plataformatec/devise/wiki/How-To:-Controllers-tests-with-Rails-3-(and-rspec)

关于ruby - 如何运行 capybara 命令一次,然后运行一些测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12371605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com