Я пишу несколько тестов RSpec для приложения Rails 3.2, и Rspec продолжает сбой в этом тесте:
describe Person do
before { @person = Person.new(names: [Factory.create(:name)], DOB: Date.today) }
subject { @person }
[:names,:DOB,:phone,:email,:address1,:address2,
:city,:state,:zip,:notes,:last_seen].each do |value|
it { should respond_to(value) }
end
it { should be_valid }
describe "when no name is present" do
@person.names = []
it {should be_invalid}
end
describe "when no DOB is present" do
@person.DOB = nil
it {should be_invalid}
end
end
Когда я запускаю RSpec, я получаю undefined method 'names=' for nil:NilClass (NoMethodError)
для этой строки: @person.names = []
Если я удаляю тест без имени, он вылетает на @person.DOB = nil
Похоже, как-то, @person
не устанавливается перед блоком describe
.Есть ли какая-то особенность RSpec, которую я пропускаю?
Редактировать: Модель Персона:
class Person < ActiveRecord::Base
has_and_belongs_to_many :names
validates_presence_of :DOB
end
Довольно просто.Существует names_people
таблица соединений для соединения имени и персоны.Как я уже сказал, я обычно могу получить доступ к имени через names=()
.Это что-то в этом тесте.