我想在SubmissionsController中删除space_available_mb方法,使其返回5.这不起作用。它返回真实硬盘上的正确空间。
如果注释掉space_available_mb
,则会引发期望错误,这意味着should_receive
正常工作。但是,它不会返回5,而是实数,这意味着and_return
由于某种原因而失败。
进一步调试显示实际调用and_return
,但仅在方法运行并返回实数后才会调用。
Scenario: Hard Disk Space is low on new submission
Given I am on the new_submission page
And hard disk space is low
Then I should see "Low disk space!"
Given /^hard disk space is low$/ do
SubmissionsController.should_receive(:space_available_mb).and_return(5)
end
class SubmissionsController < ApplicationController
include FileManager
def new
space = space_available_mb
...
end
end
module FileManager
def space_available_mb
...
end
end
答案 0 :(得分:5)
根据模拟框架,语法不同,但您要完成的是在控制器的任何实例上存根方法。在RSpec中,您有this。所以根据你的尝试:
Given /^hard disk space is low$/ do
SubmissionsController.any_instance.should_receive(:space_available_mb).and_return(5)
end
如果您打算使用任何其他模拟框架,那么必然会有像RSpec这样any_instance
的方法。