我有一個方法,將代碼塊作爲參數。問題是:如果此方法稱爲塊,如何使用RSpec進行測試?RSpec - 測試如果方法稱爲其塊參數
該塊可以在該方法需要的任何範圍內評估,不一定使用yield
或block.call
。它被傳遞給另一個類,或者在匿名類對象或其他地方評估它。爲了讓測試通過,它足以在方法調用的結果中評估塊。
有沒有辦法使用RSpec來測試這樣的事情?
也this見與lets
和嘲笑更復雜的情況。
我有一個方法,將代碼塊作爲參數。問題是:如果此方法稱爲塊,如何使用RSpec進行測試?RSpec - 測試如果方法稱爲其塊參數
該塊可以在該方法需要的任何範圍內評估,不一定使用yield
或block.call
。它被傳遞給另一個類,或者在匿名類對象或其他地方評估它。爲了讓測試通過,它足以在方法調用的結果中評估塊。
有沒有辦法使用RSpec來測試這樣的事情?
也this見與lets
和嘲笑更復雜的情況。
我平時做這樣的事情
a = 1
b.go { a = 2}
a.should == 2
這個也可以!簡單而有效!謝謝;-)還添加了額外的信息''應''測試,以防止混淆,像[這裏](http://stackoverflow.com/questions/4183656/how-to-attach-message-to-rspec-check) – wrzasa
感謝戴夫牛頓在評論上述建議我做了這樣的事情:
it "should run block defining the node" do
message="This message is raised if block is properly evaluated."
expect do
node do
raise message
end
end.to raise_error message
end
在錯誤的情況下,這個打印消息:
Failure/Error: expect do
expected Exception with "This message is raised if block is properly evaluated." but nothing was raised
,我覺得足夠信息。
再次感謝您的幫助!
我喜歡用throw
代替raise
對於這類問題,因爲它不能被搶救是任意的救援處理程序。所以它可能看起來像這樣:
my_proc = proc { throw :my_proc_was_called }
expect {
my_proc.call
}.to throw_symbol :my_proc_was_called
創建一個副作用的塊,如設置一個封閉變量我們引發一個異常,並檢查副作用? –
感謝您的想法!特別是在這種情況下,有例外的概念是有希望的。 – wrzasa