如何添加一个调用辅助方法的mocha期望?

我正在将一个方法从一个控制器转移到一个帮手; 现在将从视图中调用该方法。 以前,在我的控制器中,我有

def show @things = gather_things end 

在我的function测试中,我有

 test "show assigns things" do get :show assert_equal GATHERED_THINGS, assigns(:things) end 

现在, gather_things生活在帮助器中并从视图中调用。 我有一个帮助器的unit testing,它确保它返回正确的值,但我希望我的function测试断言它被调用。 我试过了

 test "show calls gather_things" do @controller.expects(:gather_things) get :show end 

但这不起作用。 我应该打电话给什么expects(:gather_things)

如果您已将代码从控制器移到View中,那么它实际上已经超出了function测试的范围。

我不知道正确的类来满足你的期望……但是你可以想象一下,在方法“gather_things”中做类似的事情: logger.error self.class.name – 这将吐出类为您命名为日志。 然后你可以把你的期望放到那个class级。

现在我们谈到问题的关键……你是否已将该代码移入视图中?

我的意见是你不应该。 设置模型对象的集合恰恰是控制器代码中的内容 – 如果您以后决定要在CSV文件中显示相同的数据,还是作为RESTful xml API,该怎么办? – 无论您使用什么视图,仍然需要实例化相同的对象集。 所以我的终极推荐是将该方法再次移回控制器所属的位置。

编辑:以下是现在过时的建议,与此用户无关,但可能与其他人有关

如果您正在使用rspec进行测试 – 它实际上并不在function测试期间呈现视图 (除非您专门打开它),因此任何名为表单视图的代码都不会执行。

如果您想测试View调用的东西,您需要打开它,或者在视图测试中测试它。