Ruby on Rails: Cucumber: как сбрасывать БД после каждого сценария? - PullRequest
7 голосов
/ 16 июня 2010

Итак, я в своей тестовой среде

теперь в терминале rake db: test: prepare очищает базу данных ... но не тогда, когда я запускаю ее из кода

И у меня это есть в функциях / 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 после завершения моих тестов

Это в моей базе данных .yml

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

я тоже пробовал

db:test:purge

и

db:test:reset

и я знаю, что он использует мою тестовую базу данных, потому что я проверяю mySQLWorkbench, и он вставляет данные в таблицы ... но не удаляет данные, когда это сделано (я должен удалить их вручную). Когда таблицы пусты, контрольные примеры проходят

Ответы [ 3 ]

4 голосов
/ 24 сентября 2012

Вы должны использовать

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 голос
/ 16 июня 2010

Сценарии в Cucumber, как и тесты в RSpec, запускаются в блоках транзакций и откатываются после завершения сценария. Любые данные в базе данных, которых там быть не должно, вероятно, остались от чего-то другого. Попробуйте очистить вашу базу данных.

0 голосов
/ 16 июня 2010

Об этом, но вы пытались сбросить и воссоздать базу данных на лету?

...