Ошибка rspec - «Не удалось найти таблицу», но rake db: test: prepare не исправляет это - PullRequest
2 голосов
/ 28 января 2012

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

Could not find table 'users' (ActiveRecord::StatementInvalid)

Таблица users находится прямо в schema.rb:

  create_table "users", :primary_key => "user_id", :force => true do |t|
    t.string   "first_name",          :limit => 100,                                    :null => false
    t.string   "last_name",           :limit => 100,                                    :null => false
    (...)
    t.boolean  "current_student",                    :default => true,                  :null => false
    t.boolean  "unregistered",                       :default => false,                 :null => false
  end

Вот что я пробовал:

  • rake db:test:prepare: без изменений
  • удаление schema.rb и воссоздание его с помощью rake db:schema:dump: без изменений

Мое приложение работает нормально - я могу создавать пользователей, входить, выходить из системы и так далее. Но ни один из моих тестов не работает. Что я должен попробовать дальше?

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Вместо этого запустите rake db:test:load, чтобы создать тестовую базу данных из файла schema.rb

. Rake db: test: load воссоздает тестовую базу данных из текущего db / schema.rb.При последующих попытках рекомендуется сначала запустить db: test: prepare, так как он сначала проверяет наличие отложенных миграций и, соответственно, предупреждает вас.

Дополнительная информация: http://guides.rubyonrails.org/testing.html#preparing-your-application-for-testing

0 голосов
/ 29 января 2012

Обнаружена проблема.

В одной из моих моделей область видимости была написана так:

scope :registered, where(:registered => true)

В глубине трассировки стека фактически была ссылка на эту строку.Я изменил область действия:

scope :registered, :conditions => {:registered => true}

... и все заработало.Уф.

...