【问题标题】:Rspec: stub out controller actionRspec:存根控制器动作
【发布时间】:2014-03-31 16:35:53
【问题描述】:

我正在为一个控制器编写请求规范,我想删除另一个控制器的通过 AJAX 调用的方法。 AJAX 调用中的控制器操作用于定位地址,它与请求的其余部分无关。控制器动作总是什么都不渲染。

我试过了:

before :each
  AddressesController.any_instance.stub(:update).and_return nil
end

但是,这给了我一个错误:

Failure/Error: Unable to find matching line from backtrace
 ActionView::MissingTemplate:
   Missing template addresses/update, application/update

该操作不存在视图模板,因为它始终不呈现任何内容。

有没有一种方法可以完全删除其他控制器的操作,或者我是否需要改为删除方法的内部?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec controller stub


    【解决方案1】:

    您将无法从请求规范中存根控制器操作。但是,您可以存根 AJAX 请求,以便永远无法到达控制器操作。 Webmock 是个不错的选择。

    【讨论】:

      【解决方案2】:

      请参阅this thread 了解更多信息。就像你提到的那样,你应该把方法的内部部分去掉。

      【讨论】:

      • 我以前见过这个问题,但是我不明白它与我的问题有什么关系。奇怪的是,这个问题似乎是测试 Rails 对控制器错误的处理,我认为对内部进行存根是有意义的。我问的是为单独的控制器存根一个动作,当它与我要测试的内容无关时,我宁愿不必考虑这个动作的内部。我错过了什么吗?有没有办法做到这一点?
      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 2023-03-31
      • 2013-07-28
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多