-->

数据库清理问题与水豚的webkit(Database Cleaner issue with Capy

2019-08-21 18:02发布

我用黄瓜给我写集成测试, 数据库清理 ,以保持我的分贝干净。 一切都完美的作品作为我的测试并不需要Javascript。

我可以让这最后的测试通过使用水豚webkit的 ,但后来我的数据库是未清除的。

这里是我的功能/支持/ 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

我想类似的东西这个检查是哪个驱动程序所使用的水豚,但没有奏效。 我也试过在第三部分中提到的黑客这篇文章后来什么都没有工作...

我真的不知道如何实现这一点,任何帮助,将不胜感激。

提前致谢。

Answer 1:

快速回答:

配置你的JavaScript测试使用截断,而不是交易:

DatabaseCleaner.strategy = :truncation

更详细的解释:

交易策略不使用JavaScript测试中很好地工作,因为大多数支持JavaScript的水豚驱动程序在不同的线程比应用程序代码运行测试。

下面是该过程的基本轮廓:

  • 水豚启动时使用的WEBrick或薄在后台线程机架应用。
  • 主线程设置驱动器,提供机架应用程序运行的端口。
  • 您的测试要求司机与应用程序,从而导致伪造的Web浏览器来执行你的应用的请求进行交互。

这是必要的,因为这是很难做出执行针对内存机架应用程序请求一个假的浏览器。 在某些数据库驱动程序,它不是安全地执行多个线程查询对同一事务。

这样做的最终结果是,你需要提交事务在您的测试代码,以使数据能够在应用程序代码中可见。 解决这个问题的最简单的方法是使用数据库截断清洁的生产策略。

您可以配置RSpec的(或黄瓜)使用交易的一切,但JavaScript的测试。 这将是对非JavaScript测试的速度,同时还对JavaScript的测试工作。

Avdi格林对这个问题的一个很好的博客贴子,详细描述了解决方案: http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/



Answer 2:

基于事务startegies不黄瓜工作。 这样做的原因是,你必须运行两个独立的过程,一个是运行你的应用程序服务器,然后另外一个做实际的请求。 周围有这种不同的方式,但他们是肮脏的黑客。 干净的解决方案是使用截断你DatabaseCleaner策略。

DatabaseCleaner.strategy = :truncation

Before do
  DatabaseCleaner.clean_with :truncation
end


文章来源: Database Cleaner issue with Capybara webkit