我的控制器中有一个这样定义的函数:
def respond_with(action = 0, &block)
if block_given?
response = get_response
block.call( MyResponse.new(response) )
end
end
我可以查询响应对象:
respond_with do |response|
case response.status
when 'ok'
when 'errors'
#etc etc...
end
如果我愿意,我可以在没有阻止的情况下调用它。
如果我有一个返回值的函数,那就像
controller.should_receive(:respond_with).with(DO_SOMETHING).and_return(something)
可以
def respond_with(action = 0)
...
response
end
如何在| response |中检查是否使用特定值调用了块?
答案 0 :(得分:1)
而不是
.and_return(something)
我用:
.and_yield(api_response_mock)
这就是工作。由于块获得了响应对象,因此gem rspec-mocks在这里很方便。
答案 1 :(得分:1)
例如,你可以这样做:
expect {|b| controller.respond_with(&b)}.to yield_with_args(MyResponse)
如果您只想检查该块是否使用MyResponse
参数调用了一次。