2012-02-17 11 views
0

を実行している間、私はRailsの3.2アプリのためにいくつかのRSpecのテストを書いている、とRSpecのは、このテストでクラッシュし:Railsの3.2 - RSpecの - 未定義のメソッドエラー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のを実行すると、私が手ノー名前テストを削除した場合、それは@person.DOB = nil

にcrashs @person.names = []

それは@personが前に設定されていない、何とか次のようになります。この行のブロック。 RSpecのいくつかの変わった点がありますか?

編集:人モデル:

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :names 
    validates_presence_of :DOB 
end 

非常にシンプル。名前と人を接続するためのnames_people結合テーブルがあります。私が言ったように、私は通常names=()によって名前にアクセスできます。これはこの1つのテストに関するものです。

+0

は '(' Person.newことPerson.new'べきではない:名=> [Factory.create(この代わりに

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

:たとえば、私はこれを使用していました:name)]、:DOB => Date.today) '? – ScottJShea

+1

'rake db:test:prepare'を実行したことを確認してください。これは、マイグレーション後にアクティブレコードがテストDB上のカラムを見つけることができないことがあります。 –

+0

こんにちは、私たちにPersonモデルに関する詳細を教えてください。 names属性のアクセサーがないので、メソッド名=()は存在しないようです。 –

答えて

0

解決しました。 @personに変更するには、もう一度beforeメソッドを使用しなければなりませんでした。

describe "when no name is present" do 
    @person.names = [] 
    it {should be_invalid} 
end 
関連する問題