Ошибка RSpec: не удалось найти таблицу после миграции ...? - PullRequest
29 голосов
/ 10 марта 2011

У меня есть приложение «голые рельсы 3» с одной моделью, сгенерированное с помощью rails g model User.

Я добавил фабрику (с помощью factory_girl_rails):

Factory.define :user do |f|
  f.email "test@test.com"
  f.password "blah"
  f.password_confirmation "blah"
  f.display_name "neezer"
end

Затем ядобавили один тест:

require 'spec_helper'

describe User do

  subject { Factory :user }

  it "can be created from a factory" do
    subject.should_not be_nil
    subject.should be_kind_of User
  end

end

Затем я перенесу свою базу данных , используя rake db:migrate.

Затем я запускаю тест, используя rspec spec, и тестпроисходит сбой со следующим:

Failures:

  1) User can be created from a factory
     Failure/Error: subject { Factory :user }
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'

Я в замешательстве, потому что я только что перенес свою базу данных, а мой файл schema.db отражает наличие таблицы пользователей, так что же дает?

Я знаю, что это вопрос новичка, но удар головой о стену не работает ...

factory_girl (1.3.3)
factory_girl_rails (1.0.1)
rails (3.0.5)
rspec-rails (2.5.0)
sqlite3 (1.3.3)

Ответы [ 3 ]

84 голосов
/ 10 марта 2011

Попробуйте выполнить

rake db:test:prepare

Это должно исправить ваши тесты БД.

2 голосов
/ 04 августа 2014

Суть в том, что команда rspec не выполняет миграцию в вашей тестовой базе данных.и rake db:migrate выполняет только миграции в вашей текущей среде, вероятно, development.Другие среды, такие как production и test, заканчиваются без этих изменений.

Вы можете запустить

rake spec

, который подготовит ваше тестирование БД (сбросить и создать с использованием schema.rb) изапустите все тесты.

Как и другой ответ, предложенный , такой:

rake db:test:prepare

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

0 голосов
/ 04 августа 2014

попробуйте это:

For rails version > 4.1+ this solution will work as the current scenario.

but in Rails 4.1+, rake db:test:prepare is deprecated.

попробуйте использовать

rake db:migrate RAILS_ENV=test (it will work for all version of rails)
...