2012-07-31 38 views
0

我無法通過測試。在我的應用程序中,用戶可以有多個他們請求的會議(sent_meetings)以及他們請求的會議(received_meetings)。rspec測試失敗:兩個「科目」之間的衝突

首先,我(簡化)user.rb型號:

user.rb

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation 
    has_secure_password 

    has_many :sent_meetings, :foreign_key => "requestor_id", :class_name => "Meeting" 
    has_many :received_meetings, :foreign_key => "requestee_id", :class_name => "Meeting" 
end 

而且我meeting.rb型號:

meeting.rb

class Meeting < ActiveRecord::Base 
    attr_accessible :intro, :proposed_date, :proposed_location 

    belongs_to :requestor, class_name: "User" 
    belongs_to :requestee, class_name: "User" 
end 

我的測試:

meeting_spec.rb

require 'spec_helper' 

describe Meeting do 

    let(:requestee) { FactoryGirl.create(:user) } 
    let(:requestor) { FactoryGirl.create(:user) } 

    before { @received_meeting = requestee.received_meetings.build(intro: "Lorem ipsum") } 
    before { @sent_meeting = requestor.sent_meetings.build(intro: "Lorem ipsum") } 

    subject { @sent_meeting } 
     it { should respond_to(:intro) } 
     it { should respond_to(:requestor_id) } 
     it { should respond_to(:requestor) } 
     its(:requestor) { should == requestor } 
     # it { should be_valid } 

    subject { @received_meeting } 
    it { should respond_to(:intro) } 
    it { should respond_to(:requestee_id) } 
    it { should respond_to(:requestee) } 
    its(:requestee) { should == requestee } 
    # it { should be_valid } 

end 

似乎是在我的規格文件(@sent_meeting和@received_meeting)兩個「主題」行之間的衝突,以及一個覆蓋另一個。這是我失敗的測試消息:

失敗:

1)會議請求 故障/錯誤:它(:請求者){應==請求者} 預期:# 有:無(使用==) #./spec/models/meeting_spec.rb:15:in`塊(2級)在'

在0.67458秒 36個實例成品,1次失敗

失敗的例子:

rspec的./spec/models/meeting_spec.rb:15#會議請求

我發現有趣的是,我得到這個錯誤只爲要麼請求者或請求方(顯然有衝突)。兩個主題代碼塊的順序很重要,當我切換它們時,我會得到與上面相同的錯誤,但對於'請求者'而不是'請求者'。

我怎樣才能通過測試?謝謝!

回答

1

你不能這樣做。你必須這樣做:

require 'spec_helper' 

describe Meeting do 

    let(:requestee) { FactoryGirl.create(:user) } 
    let(:requestor) { FactoryGirl.create(:user) } 

    before { @received_meeting = requestee.received_meetings.build(intro: "Lorem ipsum") } 
    before { @sent_meeting = requestor.sent_meetings.build(intro: "Lorem ipsum") } 

    describe "sent meetings" do 
    subject { @sent_meeting } 
    it { should respond_to(:intro) } 
    it { should respond_to(:requestor_id) } 
    it { should respond_to(:requestor) } 
    its(:requestor) { should == requestor } 
    it { should be_valid } 
    end 

    describe "received meetings" do 

    subject { @received_meeting } 
    it { should respond_to(:intro) } 
    it { should respond_to(:requestee_id) } 
    it { should respond_to(:requestee) } 
    its(:requestee) { should == requestee } 
    # it { should be_valid } 
    end 

end 

你也可以使用讓前,而不是像這樣:

require 'spec_helper' 

describe Meeting do 

    let(:requestee) { FactoryGirl.create(:user) } 
    let(:requestor) { FactoryGirl.create(:user) } 
    let(:received_meeting) { requestee.received_meetings.build(intro: "Lorem ipsum") } 
    let(:sent_meeting) { requestor.sent_meetings.build(intro: "Lorem ipsum") } 

    describe "sent meetings" do 
    subject { sent_meeting } 
    it { should respond_to(:intro) } 
    it { should respond_to(:requestor_id) } 
    it { should respond_to(:requestor) } 
    its(:requestor) { should == requestor } 
    it { should be_valid } 
    end 

    describe "received meetings" do 
    subject { received_meeting } 
    it { should respond_to(:intro) } 
    it { should respond_to(:requestee_id) } 
    it { should respond_to(:requestee) } 
    its(:requestee) { should == requestee } 
    it { should be_valid } 
    end 

end 

它會更快。

+0

很棒,豆。。有用。謝謝!然而,現在我的驗證測試失敗了(我沒有註釋'it {should be_valid}')。發送的會議和接受的會議都需要對請求者和被請求者作出迴應嗎?我嘗試過,但他們繼續失敗。 – keypulsations 2012-07-31 18:48:02

+0

我認爲這是另一個問題。請批准我的回答並提出另一個問題。謝謝! – Dougui 2012-07-31 19:14:46