1

我在我的控制器中有一个这样定义的函数:

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| 中是否使用特定值调用了块 ?

4

2 回答 2

1

代替

.and_return(something) 

我用:

.and_yield(api_response_mock)

这就是工作。并且由于块得到一个响应对象,gem rspec-mocks 在这里很方便。

于 2013-09-26T22:41:57.447 回答
1

您使用https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/yield-matchers#yield-with-args-matcher中所述的“收益匹配器”

例如,您可以这样做:

expect {|b| controller.respond_with(&b)}.to yield_with_args(MyResponse)

如果您只是想检查该块是否使用MyResponse参数只调用了一次。

于 2013-09-27T00:40:44.170 回答