我有一个控制器,比如FoosController
,包裹了一个模型Foo
。 Foo
has_many Bar
。
我可以在我的控制器内部@foo.bars
,但如果我知道Bar
又有其他关系,我想要有效率并预取物品。为了简化它,我在我的模型Foo
上定义了方法:
def bars_deep
bars.includes([:other,:stuff])
end
我想测试一下,当我调用控制器的某些方法时,它会调用@foo.bars_deep
而不只是@foo.bars
。
我该怎么做?我尝试使用MiniTest::Mock
,但失败了:
f = @foo
mock = MiniTest::Mock.new
mock.expect :call, nil, []
f.stub :bars_deep, mock do
get :cmethod, id: @foo
end
assert mock.verify
问题在于它是在 {/ 1>}的实例上进行模拟,但在控制器内部加载了另一个。
如何测试我的控制器是否正在调用Foo
,从而正确准备而不只是bars_deep
?