Тестирование всего набора Rspec завершается неудачно - PullRequest
6 голосов
/ 20 июля 2011

У меня странная ситуация, когда при запуске отдельного спецификационного файла модели rspec все примеры отображаются зелёным, если я тестирую всю папку spec / models, все мои примеры зелёного цвета. Если я тестирую контроллеры, они все проходят зеленый Если я тестирую весь набор (через спецификацию rspec), то я получаю сбои - Если я удаляю тесты контроллера полностью, все становится зеленым. Теперь я ожидаю, что это полностью самообман, но я просто не могу понять это.

Я сузил его до конкретных примеров в тестах контроллера - что приводит к сбою примеров в спецификациях моделей.

например. в notes_controller_spec.rb, если эта строка присутствует

 Note.any_instance.stubs(:valid?).returns(false)

это вызывает сбой в моих моделях / account_spec.rb

Failure/Error: @account.all_notes.should have(2).notes
ArgumentError:
comparison of Note with Note failed
./app/models/account.rb:293:in `sort'

где строка 293;

 (self.notes + self.transactions.map(&:notes).flatten).sort {|a,b| a.created_at <=> b.created_at }

Я почти уверен, что это будет один из тех моментов на лице, так что будь осторожен со мной!

Ответы [ 3 ]

1 голос
/ 17 августа 2012

Делаете ли вы какие-либо настройки даты в блоке before: all?Они не являются транзакционными и могут вызвать проблемы с тестовым загрязнением.

Кроме того, я думаю, что ваш синтаксис может быть здесь отключен:

    Note.any_instance.stubs(:valid?).returns(false)

Должно быть:

    Note.any_instance.stub(:valid?).and_return(false)
0 голосов
/ 02 февраля 2017

У меня была похожая проблема: отдельные спецификации модели пройдены.При запуске всего модельного пакета у меня было около 30 сбоев.Я посмотрел на файл до того, как произошли все ошибки.Там я обнаружил, что я настраивал вещи внутри потоков и использовал default_scopes, как в этом railscast .

В предложении before я напечатал Company.current_id.Как я и думал, при индивидуальном запуске Company.current_id был nil.При запуске пакета Company.current_id было 2.Это то, что происходит, когда вы используете области по умолчанию.Чтобы исправить это, я просто установил Company.current_id в nil в предложении before.

До

describe Service, type: :model do
  before do
  end
end

После

describe Service, type: :model do
  before do
    Company.current_id = nil
  end
end
0 голосов
/ 07 сентября 2014

У меня были похожие проблемы с RSpec 3 и Rails 4.1.Всякий раз, когда я запускал проблемный файл спецификаций самостоятельно, он проходил, а запуск полного пакета приводил к сбою.

В моем случае это было как-то связано с часовыми поясами.Я явно устанавливал часовой пояс в ApplicationController и по каким-то причинам моим характеристикам он не понравился.Если я не устанавливаю часовой пояс в тестовой среде, все проходит снова.например,

unless Rails.env.test?
  Time.zone = "some timezone value here"
end
...