我正在使用Ruby on Rails 3.1.0和rspec-rails 2 gem。我正在測試我的控制器代碼(順便說一下:我是新手rspec),我想使一個類對象實例返回一個預定義的值。也就是說,在我的控制,我有:如何使類對象實例返回預定義的值?
def create
...
if @current_user.has_authorization?
...
else
...
end
end
爲了測試if
聲明我想提出可能是(對我的工作對當前規範例如「else
部分」 - 請閱讀下面作爲示例實現),@current_user.has_authorization?
返回false
。
我該怎麼做?
我想在我的規範文件中的以下,但似乎沒有達到預期效果:
it "should have no authorization" do
@current_user.stub(:has_authorization?).and_return(false)
# I also tried the following and it still doesn't work
# @current_user.should_receive(:has_authorization?).and_return(false)
post :create
...
end
如果您在'@ current_user.stub ...'調用之後添加'@current_user.has_authorization?.should be_false',會發生什麼? – Fabio
@Fabio - 恰巧測試通過了。當然,我註釋了'post:create ...'代碼以使其工作。 – user502052
所以這個問題不在存根調用中,它應該在別的地方,也許你稍後在代碼中改變'@ current_user'的值。爲了避免這種問題,我使用mocha作爲嘲笑框架,它定義了一個名爲'any_instance'的方法,爲該類的所有實例存根方法。如果你有興趣,我可以發佈作爲答案(它太長,作爲評論)。 – Fabio