Исключение ограничения SQLite для пустой таблицы при запуске rspec - PullRequest
0 голосов
/ 10 октября 2011

У меня странная проблема с моим набором тестов 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.

1 Ответ

1 голос
/ 02 ноября 2011

У меня тоже была эта проблема.Кроме того, интерпретатор Ruby при определенных условиях может вызвать сбой при попытке исследовать его (возможно, вызванный SQLite).

У меня объявлен уникальный индекс, например:следующее ограничение уникальности для модели (в дополнение к существующему индексу в миграции) решило проблему:

validates_uniqueness_of :column1, scope: :column2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...