4

我正在编写一个视图规范,它呈现一个包含该行的视图(在 haml 中):

=link_to new_post_path

但规范失败:

ActionController::RoutingError: No route matches {:action=>"new", :controller=>"post"}

我正在尝试对该new_post_path方法进行存根,因为它对视图规范实际上并不重要,但没有任何运气。

在我的规范中,我尝试了以下两种变体,但没有任何运气:

           stub!(:new_post_path).and_return("this path isn't important")
controller.stub!(:new_post_path).and_return("this path isn't important")
4

3 回答 3

5

如果您不在视图规范中,但发现自己需要存根路径助手,则以下语法适用于 Rails 4.2.5;您需要receive_message_chain按照此处所述:

https://github.com/rspec/rspec-mocks/issues/1038

以机智:

allow(Rails.application).to receive_message_chain(:routes, :url_helpers, :new_post_path).and_return("this path isn't important")

于 2016-10-19T23:31:10.290 回答
3

该方法new_post_path来自Rails.application.routes.url_helpers模块。您需要存根该模块上的方法

Rails.application.routes.url_helpers.stub(:new_post_path).and_return("this path isn't important")
于 2012-12-12T18:08:58.943 回答
3
allow(view).to receive(:new_post_path).and_return("this path isn't important")

这是 rspec 3.2 语​​法

我想旧的语法是

view.stub(:new_post_path).and_return("this path isn't important")
于 2015-06-16T23:39:39.060 回答