如果我在我的规范中模拟一个对象和/或存根一个方法,即使它只是间接调用,它是否会被使用?

时间:2014-01-11 18:58:09

标签: ruby-on-rails-3 mocking tdd bdd

我是嘲笑和捣蛋的新手,但我认为我的情况是他们的使用是理想的。

在我的应用程序中,当用户保存Product时,after_save回调会触发创建Publication个实例,从而导致产品数据通过API发送给某些第三方。< / p>

我有Product的请求规范来测试我的CRUD操作。

如果我存根API方法或模拟发布模型,那么这些模拟/存根是否会在我的规范中使用,即使它们实际上是在Product after_save回调中调用的?我对这一点感到困惑。

更新

我想我会这样做:

Publication.any_instance.stub(:publist).and_return(true)

在测试开始时这样做。这样就可以处理创建的任何实例。那是怎么回事?

1 个答案:

答案 0 :(得分:1)

是的,存根将执行它所说的内容,并且发布类的任何实例上的publist方法将始终返回true。

而不是把它放在“顶部”,而不是做类似的事情。

context 'when there is a publist' do
  Publication.any_instance.stub(:publist).and_return(true)
  it 'should ...' do
    ...
  end
end

然后,如果需要,你可以在没有存根的情况下进行测试,或者测试publist在其他上下文块中返回false的测试,并且在规范中很好并且清楚。