attr_accessor необходим для прохождения спецификации - PullRequest
3 голосов
/ 17 ноября 2011

Это может быть полная противоположность этого вопроса . Рассмотрим следующую спецификацию:

describe Record do
  it "calculates the first term grade" do
    test = stub(id: 1, final_grade: 20)
    audition = stub(id: 1, final_grade: 20)
    record = Record.create!({
      first_term_knowledge: 15,
      first_term_attitude: 10,
      first_term_test_id: test.id,
      first_term_audition_id: audition.id})

    record.calculated_grade.should_not be_nil
  end
end

В модели Record все эти атрибуты перенесены в БД.

Спецификация не работает с этим объяснением:

1) Record calculates the first term grade
    Failure/Error: record = Record.create!({
    ActiveRecord::UnknownAttributeError:
      unknown attribute: first_term_knowledge
    # ./spec/models/record_spec.rb:7:in `block (2 levels) in <top (required)>'

Документация Rails гласит, что attr_accessor должен быть установлен, чтобы разрешить массовое назначение. Я попробовал это, и тест продвигается вперед. Тем не менее, это был всплеск разработки без предварительных тестов, и first_term_knowledge успешно прошел.

Как заставить тест работать, если рабочий код уже работает без attr_accessor? Это неправильный способ проверить это? Должен ли я использовать макеты для этого или что-то?

1 Ответ

3 голосов
/ 17 ноября 2011

Спасибо Бретту Бендеру за ответ, отличный ход!

rake db:test:prepare необходимо для загрузки всей схемы в тестовой среде.

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