【发布时间】:2011-07-09 11:51:04
【问题描述】:
我想测试是否实际调用了控制器操作,而在某些 before_filter 中没有发生重定向。由于控制器操作本身可能会进行重定向,因此我想对操作进行存根以引发特定错误(SuccessfulActionError 或类似错误),然后检查该错误是否表明该方法已被调用。
所以我添加了以下内容:
controller.stub!(:action).and_raise(SuccessfulActionError)
它工作不知何故,引发了异常,但方法中的实际代码仍然执行(例如,如果我将不存在的记录的 id 发送到“显示”操作,它会抛出一个 ActiveRecord::RecordNotFound 异常)。
这是为什么呢?我想完全存根该操作,就好像它被实现为
def action
raise SuccessfulActionError
end
我做错了什么?这是错误的方法吗?
编辑:
使用
controller.should_receive(:action)
也不行。
我像这样在 before_all 过滤器中覆盖控制器,以修复未从 ApplicationController 获取的 default_url_options:
class MyController
def default_url_options(options = {})
{ :locale => params[:locale] }
end
end
这可能是罪魁祸首吗?不幸的是,当我删除它时,这些规格根本不起作用。
【问题讨论】:
-
我在stackoverflow.com/questions/5881459/…遇到了同样的问题,你找到解决办法了吗?