我想测试是否实际调用了控制器操作而没有在某些 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
这可能是罪魁祸首吗?不幸的是,当我删除它时,这些规格根本不起作用。