gpt4 book ai didi

javascript - 带有 :js => true causes test to fail 的 capybara

转载 作者:IT王子 更新时间:2023-10-29 03:00:04 27 4
gpt4 key购买 nike

我是 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)

我想我不太了解为 capybara 开启 JS 是做什么的。

为什么打开 JS 测试会失败?

最佳答案

我在 https://github.com/jnicklas/capybara 阅读了 Capybara 自述文件它解决了我的问题。

Transactional fixtures only work in the default Rack::Test driver, but not for other drivers like Selenium. Cucumber takes care of this automatically, but with Test::Unit or RSpec, you may have to use the database_cleaner gem. See this explanation (and code for solution 2 and solution 3) for details.

但基本上这是一个线程问题,涉及 Capybara 在运行非 Rack 驱动程序时拥有自己的线程,这使得事务固定装置功能在另一个上下文中使用第二个连接。所以驱动程序线程永远不会与正在运行的 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

关于javascript - 带有 :js => true causes test to fail 的 capybara ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178120/

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