Ruby on Rails:Cucumber:如何关闭数据库清理程序?

时间:2010-07-15 15:55:57

标签: ruby-on-rails

我正在测试的系统非常复杂,编写单独的测试用例会浪费大量时间和资源。所以,我需要我的测试来相互建立。

但是,例如,每当我在其中一个步骤定义中获得User.new时,一旦完成该方案,就会从数据库中删除用户。

如何保留所有信息......除非我强制使用db:test:prepare?

这是我的env.rb:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')

require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
require 'cucumber/rails/world'
require 'cucumber/rails/active_record'
require 'cucumber/web/tableish'
require 'cucumber/rails/rspec' 
require 'rake'



require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'
require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript
require 'database_cleaner'
require 'database_cleaner/cucumber'
DatabaseCleaner.strategy = :transaction

@subscription_plan = Factory(:subscription_plan)
@subscription_plan.save!

Capybara.default_selector = :css
Capybara.default_wait_time = 2
Capybara.javascript_driver = :culerity
Capybara.current_driver = :culerity
Capybara.default_host = "cucumber.test.com" #for Rack::Test
Capybara.app_host = "cucumber.test.com" #if Capybara.current_driver == :culerity

Cucumber::Rails::World.use_transactional_fixtures = false

6 个答案:

答案 0 :(得分:6)

让你的测试相互建立是一个糟糕的主意,因为这意味着每个测试都不能独立存在,并使你的测试泄漏状态(这会产生大量错误的测试结果)。如果您的测试无法从干净的平板开始,请使它们更具原子性。

就目前情况而言,从你的描述来看,你并没有真正正确地测试你的系统。

答案 1 :(得分:2)

只需删除

gem 'database_cleaner'
来自Gemfile的

如果发生NameError异常,请结帐active_record文件。

这是由于来自cucumber-rails gem的database_cleaner gem的静默依赖。

答案 2 :(得分:2)

  

数据库清理程序还包括一个空策略(不进行清理   所有)可以与任何ORM库一起使用。你也可以   通过将策略设置为nil明确地使用它。

https://github.com/bmabey/database_cleaner截至2013年11月12日

答案 3 :(得分:1)

在features / support / env.rb中应该是一行:

Cucumber::Rails::World.use_transactional_fixtures = true

将其设置为false,并且数据库截断停止。

编辑:由于此失败,请尝试将标记@ no-txn添加到需要数据保留的要素文件中;似乎这是Cucumber使用的保留标记,导致场景不被包装在事务中。

答案 4 :(得分:1)

在功能中尝试使用@ no-database-cleaner

答案 5 :(得分:0)

唯一对我有用的是

# features/support/env.rb
# ...
Cucumber::Rails::Database.autorun_database_cleaner = false

它来自GitHub README