DatabaseCleaner вызывает NoMethodError: неопределенный метод «откат» для nil: NilClass

У меня есть приложение 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)>'

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


person bibliotechy    schedule 31.10.2018    source источник


Ответы (1)


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

 after do
    DatabaseCleaner.clean
  end

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

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

person bibliotechy    schedule 31.10.2018