我对 Capybara 和 Rails 测试都很陌生,所以如果这是一个简单的答案,请原谅我。
我有这个测试
it "should be able to edit an assignment" do
visit dashboard_path
select(@project.client + " - " + @project.name, :from => "assignment_project_id")
select(@team_member.first_name + " " + @team_member.last_name, :from => "assignment_person_id")
click_button "Create assignment"
page.should have_content(@team_member.first_name)
end
它按原样通过,但如果我添加 :js => true 它会失败
cannot select option, no option with text 'Test client - Test project' in select box 'assignment_project_id'
我正在使用 FactoryGirl 创建数据,并且当测试在没有 JS 的情况下通过时,我知道该部分正在工作。
我尝试过使用默认的 JS 驱动程序和 :webkit 驱动程序(安装了 capybara-webkit)
我想我还不太明白水豚打开JS是做什么的。
为什么打开 JS 测试会失败?
我已阅读 Capybara 自述文件https://github.com/jnicklas/capybara https://github.com/jnicklas/capybara它解决了我的问题。
事务装置仅在默认的 Rack::Test 驱动程序中工作,但是
不适用于 Selenium 等其他驱动程序。黄瓜可以解决这个问题
自动,但使用 Test::Unit 或 RSpec,您可能必须使用
数据库清理宝石。看这个解释 https://groups.google.com/d/msg/ruby-capybara/JI6JrirL9gM/R6YiXj4gi_UJ(以及代码解决方案2 http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/#comment-220
and 解决方案3 http://pastie.org/1745020)了解详情。
但基本上它是一个线程问题,涉及 Capybara 在运行非机架驱动程序时拥有自己的线程,这使得事务固定装置能够在另一个上下文中使用第二个连接。因此驱动程序线程永远不会与正在运行的 rspec 处于同一上下文中。
幸运的是,这可以很容易地解决(至少对我来说是这样),在 DatabaseCleaner 策略中进行动态切换即可使用:
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
if Capybara.current_driver == :rack_test
DatabaseCleaner.strategy = :transaction
else
DatabaseCleaner.strategy = :truncation
end
DatabaseCleaner.start
end
config.after do
DatabaseCleaner.clean
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)