2013-08-30 25 views
0

試圖習慣rspec let /主題語法,我無法弄清楚什麼。 我有這個天賦:當使用rspec與let和主題語法時需要調用保存

describe Permission do 
    subject(:permission){FactoryGirl.create(:permission, role: role, branch: branch, user: user)} 
    let(:role){FactoryGirl.create(:role, name: 'master')} 
    let(:branch){FactoryGirl.create(:branch)} 
    let(:user){FactoryGirl.create(:user)} 

    context "role_names_by_user_and_branch" do 
    it "should return role names for the given user/branch pair" do 
     # permission.save 
     Permission.role_names_by_user_and_branch(user, branch).should include(role.name) 
    end 
    end 

end 

注意註釋掉permission.save。如果我在測試通行證中加上這一點。 這是我不明白的部分。如果我在做FactoryGirl.create,那麼許可 應該已經保存,並且查詢工作。

我廠是非常基本的:

FactoryGirl.define do 
    factory :permission do 
    user 
    branch 
    role 
    end 
end 

回答

0

這是因爲subject是懶加載的,所以除非你在測試中引用它塊沒有被評估。

這意味着即使只是在測試中調用permission(而不是permission.save)也足以獲得您想要的行爲。或者,你可以使用subject!,其中,根據文檔,是「就像subject,除了塊被隱式前的勾調用。」

注意let行爲以同樣的方式和同樣具有let!

+0

好吧有道理。我試圖讓它與let!一起工作!但無論出於什麼原因,我不認爲做主題!很好的解釋,謝謝! – jacklin

相關問題