sie*_*ied 10 ruby-on-rails cucumber capybara capybara-webkit database-cleaner
我正在使用Cucumber编写我的集成测试和数据库清理程序以保持我的数据库清理.一切都很完美,因为我的测试不需要Javascript.
我可以使用Capybara webkit使这些最后的测试通过,但是我的数据库根本没有被清理.
这是我的features/support/env.rb文件:
require 'simplecov'
SimpleCov.start 'rails'
require 'cucumber/rails'
Capybara.default_selector = :css
Capybara.javascript_driver = :webkit
begin
require 'database_cleaner'
require 'database_cleaner/cucumber'
DatabaseCleaner[:active_record].strategy = :transaction
rescue NameError
raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end
Before do
DatabaseCleaner.start
end
After do |scenario|
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
我想类似的东西这个检查是哪个驱动程序所使用的水豚,但没有奏效.我也试过了这篇文章第三部分中提到的hack,但后来没有任何工作......
我真的不知道如何实现这一点,任何帮助将不胜感激.
提前致谢.
Joe*_*ris 23
快速回答:
配置JavaScript测试以使用截断而不是事务:
DatabaseCleaner.strategy = :truncation
Run Code Online (Sandbox Code Playgroud)
更长的解释:
事务策略不适用于JavaScript测试,因为大多数支持JavaScript的capybara驱动程序在与应用程序代码不同的线程中运行测试.
以下是该过程的基本概述:
这是必要的,因为很难制作一个虚假的浏览器来对内存中的Rack应用程序执行请求.在某些数据库驱动程序中,针对同一事务从多个线程执行查询是不安全的.
最终结果是您需要在测试代码中提交事务,以便在应用程序代码中显示数据.解决此问题的最简单方法是使用截断数据库清理程序策略.
您可以配置RSpec(或Cucumber)以使用除JavaScript测试之外的所有事务.对于非JavaScript测试,这将更快,同时仍然适用于JavaScript测试.
Avdi Grimm在这个主题上发表了一篇很好的博客文章,详细描述了该解决方案:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/
| 归档时间: |
|
| 查看次数: |
5051 次 |
| 最近记录: |