sia*_*mii 3 ruby rspec ruby-on-rails stub cucumber
我想在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
Run Code Online (Sandbox Code Playgroud)
根据模拟框架的不同,语法也会有所不同,但是您要完成的工作是在控制器的任何实例上添加方法。在RSpec中,您有this。因此,根据您的尝试:
Given /^hard disk space is low$/ do
SubmissionsController.any_instance.should_receive(:space_available_mb).and_return(5)
end
Run Code Online (Sandbox Code Playgroud)
如果您打算使用任何其他模拟框架,那么肯定会有像any_instanceRSpec这样的方法。