Повышение DatabaseCleaner NoMethodError: неопределенный метод "откат" для nil: NilClass - PullRequest
0 голосов
/ 31 октября 2018

У меня есть приложение rails, использующее rspec и включающее DatabseCleaner, чтобы гарантировать чистоту тестовой базы данных между каждым тестом.

DatabaseCleaner настроен в нашем spec/rails_helper.rb с

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  config.around(:each) do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end

Мы наблюдаем периодические ошибки в нашей среде ci, где один тест завершится неудачно с

 1) LibraryHours Required fields Library Hour must have a location
 Failure/Error:
   DatabaseCleaner.cleaning do
     example.run
   end

 NoMethodError:
   undefined method `rollback' for nil:NilClass
 # ./spec/rails_helper.rb:66:in `block (2 levels) in <top (required)>'

Мы не можем локально воспроизвести ошибку с помощью seed из прогона rspec, и у нас возникли серьезные проблемы с отладкой.

1 Ответ

0 голосов
/ 31 октября 2018

Получается, что один из разработчиков (я) не понял, что вызов DatabaseCleaner в rails_helper уже применяется ко всем спецификациям, и добавил дополнительный вызов DatabaseCleaner.clean к одному из файлов спецификаций. Удаление дополнения:

 after do
    DatabaseCleaner.clean
  end

исправил проблему.

Я предполагаю, что это было состояние гонки, вызванное двумя вызовами DatabaseCleaner.clean.

...