配置:使用 RSpec、Capybara、Selemium 驱动程序、SQLite 数据库对 Rails 项目进行集成测试。
情况:我与 Capybara 和默认的rack_test 驱动程序进行了一些集成测试。他们直接在数据库中创建用户注册(针对 Devise gem)。然后他们像用户一样登录并使用 Capybara DSL 测试场景。
Problem:我尝试将驱动程序更改为 Selenium 来测试 JavaScript 代码。现在测试失败,因为应用程序看不到测试创建的用户注册。
调查:看起来 Selenium 驱动程序与事务的工作方式不同,因此测试中所做的更改在 Web 应用程序中是不可见的。可能的解决方案包括:
config.use_transactional_fixtures = false
DatabaseCleaner.strategy = :truncation
对我来说工作解决方案来自here https://github.com/lailsonbm/contact_manager_app and here http://snippets.dzone.com/posts/show/13057:
- 添加到 Gemfile
gem database_cleaner
- 创建文件
spec/support/javascript.rb
有内容
`
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with :truncation
end
config.before(:each) do
if example.metadata[:js]
Capybara.current_driver = :selenium
DatabaseCleaner.strategy = :truncation
else
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.start
end
end
config.after(:each) do
Capybara.use_default_driver if example.metadata[:js]
DatabaseCleaner.clean
end
end
`
尽管这对我的控制器和模型规格执行时间造成了轻微的影响(从 40 到 43 秒)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)