2015-09-28 32 views
0

我使用早該寶石,並試圖測試一些私有方法:Rspec的早該匹配與私有方法

it { should respond_to (instance_eval{:get_user_status})} 
    it { should respond_to (instance_eval{:send_email_notification})} 

但測試失敗,因爲上述兩種方法都是私有的。如何使用shoulda匹配程序正確地測試其響應能力?

回答

1

要測試私有方法,您必須使用send來調用該方法。您可以測試這種方式:

it "tests private methods" do 
    my_object = MyObject.new 
    expect(my_object.send(:get_user_status)).to eq 'some_value' 
    expect(my_object.send(:send_email_notification)).to eq 'some_other_value' 
end 
0

可能使用send測試私有方法......但你真的不應該這樣做。測試用於確認您的對象的行爲是否符合您的期望,以便在其他代碼(無論是否爲您)使用您的對象時知道會發生什麼。私人方法是你正在創建的課程的內部;他們不能從任何地方調用,除了你的班級以外,所以他們應該已經通過使用這些私人方法的公共方法的測試間接行使。您基本上可以將您的私有方法視爲提取您的公共代碼。桑迪梅斯給了偉大的談單元測試,我建議看看,如果你想了解更多關於這個;談私聊的部分是here

相關問題