Ruby on Rails:Cucumber:如何在每个场景后重置数据库?

时间:2010-06-15 23:27:21

标签: ruby-on-rails cucumber

所以我在我的测试环境中

现在,在终端,rake db:test:prepare清除db ...但是当我从代码中运行它时

我在features / support / env.rb中有这个:

Before do
    task :build_all do
      [ :debug, :release ].each do |t|
        $build_type = t
        Rake::Task["db:test:prepare"].reenable
        Rake::Task["db:test:prepare"].invoke
      end
    end
end

但是当我的测试运行

时,我的数据仍保留在project_test数据库中

这是在我的database.yml

test:
  adapter: mysql
  encoding: utf8
  database: projectname_test
  username: root
  password:

我也试过

db:test:purge

db:test:reset

我知道它正在使用我的测试数据库,因为我检查了mySQLWorkbench,它将数据插入到表中......但是在完成时不会删除数据(我必须手动删除它)。 当表为空时,测试用例通过

3 个答案:

答案 0 :(得分:4)

你应该使用

begin
  require 'database_cleaner'
  require 'database_cleaner/cucumber'
  DatabaseCleaner.strategy = :truncation

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

答案 1 :(得分:1)

与RSpec中的测试一样,Cucumber中的场景在事务块中运行,并在场景完成后回滚。数据库中不应存在的任何数据可能都是其他内容遗留下来的。尝试清除数据库。

答案 2 :(得分:0)

关于此问题,但是您是否尝试过快速删除并重新创建数据库?