Как написать спецификацию для ActiveRecord - PullRequest
0 голосов
/ 28 февраля 2012

Мой код спецификации / модели требует 'spec_helper'

describe Student do
   it "should be work" do
     student = Student.find 1
     puts student.version
   end
end

При запуске кода отображается следующая ошибка ..,

Failures:

  1) Student should be work
     Failure/Error: student = Student.find 2
     ActiveRecord::StatementInvalid:
       Could not find table 'students'
     # ./spec/models/student_spec.rb:6:in `block (2 levels) in <top (require


Finished in 0.00109 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/models/student_spec.rb:4 # Student should be work

У меня есть стол студентов. Также я использую драгоценный камень paper_trail. После запуска rake db: test: prepare тогда выдается ошибка как.,

Failures:

  1) Student should be work
     Failure/Error: s = Student.find 1
     ActiveRecord::RecordNotFound:
       Couldn't find Student with id=1
     # ./models/student_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.02182 seconds
1 example, 1 failure

Failed examples:

rspec ./models/student_spec.rb:4 # Student should be work

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Кажется, что нет таблицы студентов в тестовой среде, попробуйте запустить $ bundle exec rake db:test:prepare

0 голосов
/ 28 февраля 2012

Проблема в том, что в таблице студентов тестовой БД нет студента с id = 1 (тестовая БД очищается перед началом новых тестов).Что вы хотите проверить?

Может быть, вы хотите использовать before для вставки ученика в начале спецификации:

describe Student do
  before do
    @student = Student.new(:version => 15)
    @student.save
  end

  it "should be work" do
    student = Student.first
    # Test something ...
  end
end

Блок before запускается перед каждым тестом, вв этом случае вы можете получить первого студента в (тестовой) БД, потому что вы вставили его в блок «до» (но я не знаю, что вы пытаетесь проверить и действительно ли нужно сохранить студента).

0 голосов
/ 28 февраля 2012

Вы распространили некоторые данные в своей тестовой базе данных (используя приспособления или что-то вроде драгоценного камня FactoryGirl)? В противном случае вы не найдете "студентов" в вашей базе данных.

Test-DB и Development DB не имеют ничего общего. Фактически, Test-DB будет очищаться для каждого теста.

...