我正在将一个方法从控制器转移到助手中;现在将从视图中调用该方法。以前,在我的控制器中我有
def show
@things = gather_things
end
在我的功能测试中我有
test "show assigns things" do
get :show
assert_equal GATHERED_THINGS, assigns(:things)
end
now, gather_things
存在于 helper 中并从视图中调用。我对助手进行了单元测试,以确保它返回正确的值,但我希望我的功能测试断言它被调用。我试过了
test "show calls gather_things" do
@controller.expects(:gather_things)
get :show
end
但这行不通。我应该打电话什么expects(:gather_things)
on?
如果您已将代码从控制器移至视图中,那么它实际上已移出功能测试的范围。
我不知道正确的类来满足您的期望...但您可能可以通过在“gather_things”方法中执行以下操作来弄清楚:logger.error self.class.name
- 它会为您将类名吐出到日志中。然后你就可以把你的期望寄托在这门课上了。
现在我们来到了问题的关键......您是否应该将该代码移至视图中?
我的意见是你不应该。设置模型对象的集合正是控制器代码中应该执行的操作 - 如果您稍后决定要在 CSV 文件中或作为 RESTful xml API 显示相同的数据,该怎么办? - 无论您使用什么视图,您仍然需要实例化同一组对象。所以我的最终建议是将该方法再次移回控制器中它所属的位置。
编辑:以下建议现已过时,与该用户无关,但可能对其他人有用
如果您正在使用 rspec 进行测试 - 它在功能测试期间实际上并不渲染视图(除非您专门将其打开),因此任何称为表单视图的代码都不会执行。
如果您想测试视图是否调用某些内容,您需要将其打开,或者在视图测试中对其进行测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)