У меня странная проблема с моим набором тестов Rspec.Все тесты, которые вставляют данные в таблицу с уникальным ограничением, не выполняются.Запуск неудачных тестов по отдельности с указанием номера строки работает, как и ожидалось.
Чтобы исследовать проблему, я напечатал количество строк в этой таблице перед вставкой данных, которые вызывают исключение ограничения, и сообщает, что таблицапусто.
В любом файле нет before :all
.
Я использую DatabaseCleaner и, за исключением этой проблемы, похоже, что очистка работает.
Это, например, не работает при запуске всего файла:
describe User
# ...
describe '#follow_location' do
let(:user) { Factory(:user) }
let(:location) { Factory(:location) }
it 'should raise when trying to follow an already followed location' do
puts LocationFollowship.count # => 0
user.followed_locations << location # exception raised
lambda {
user.follow_location location
}.should raise_error User::AlreadyFollowingLocation
end
end
# …
end
РЕДАКТИРОВАТЬ: Я смог отследить его.Это связано с Rails с использованием кэшированного оператора.Вызов ActiveRecord::Base.connection.clear_cache!
заставляет это работать.Но добавление этого фрагмента в spec_helper.rb вызывает исключение SQLite cannot use a closed statement
.