Rails 3.2 - RSpec - неопределенная ошибка метода при запуске теста RSpec - PullRequest
0 голосов
/ 17 февраля 2012

Я пишу несколько тестов 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=().Это что-то в этом тесте.

1 Ответ

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

Решил это.Мне пришлось использовать метод before снова, чтобы внести изменения в @person.Например, я должен был использовать это:

describe "when no name is present" do
  before { @person.names = [] }
  it {should be_invalid}
end

Вместо этого:

describe "when no name is present" do
  @person.names = []
  it {should be_invalid}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...