Отдельные спецификации передаются при запуске в одиночку, но сбой при выполнении всех спецификаций

У меня есть 30 спецификаций в моем foo_controller_spec.rb, и когда я запускаю весь файл, используя spec, я получаю 4 отказа и 2 ожидающих ответа. Когда я запускаю 4 неудачных спецификации по отдельности, 3 из них все еще терпят неудачу, но один из них проходит. Сначала я думал, что это проблема с базой данных, что данные не были очищены должным образом между прогонами. Поэтому я установил database_cleaner (http://github.com/bmabey/database_cleaner) и добавил этот код в свой spec_helper:

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

config.before(:each) do
  DatabaseCleaner.start
  Sham.reset
  login
end

config.after(:each) do
  DatabaseCleaner.clean
end

Теперь, когда я запускаю свои спецификации, я вижу, что таблицы усекаются между каждой спецификацией, поэтому я знаю, что она работает, но спецификация все еще терпит неудачу при запуске со всеми другими спецификациями, но проходит при запуске в одиночку. Что мне здесь не хватает?

Ответ 1

У меня была точно такая же проблема и был , исходящий из моего ума!

Я отслеживал проблему вроде этого (с помощью Textmate): выберите файлы в ящике проекта (несколько файлов), а затем перейдите в раздел "Связки > Rspec > Запустить примеры в выбранных файлах/каталогах".

Фокус в том, чтобы найти, какой файл вызывает помехи другим.

Для меня это изменило I18n.locale в одном файле, из-за чего локаль изменилась для всех других примеров!

Я потерял несколько часов, сойдя с ума...

Ответ 2

На всякий случай это помогает другим: у меня была аналогичная проблема, и я узнал, что у меня

  • stray Rspec.configures, которые были переопределены для всех тестов в строке
  • WebMocks включен в одном тесте, который, как представляется, каскадируется для выполнения тестов до тех пор, пока я не включу в spec_helper, так что соединения по умолчанию были включены

    RSpec.configure do | config |    config.before(: suite) do       WebMock.allow_net_connect!

Ответ 3

У меня была аналогичная проблема сегодня, для решения которой потребовалось довольно много времени.

Это не удается:

module SomeModule
  describe SomeController do
    it 'does something' 
  end
end

Это проходит:

describe SomeModule::SomeController do
  it 'does something'
end

Проблема связана с определением области охвата.