【发布时间】:2017-08-12 07:18:20
【问题描述】:
我在 use_route 中搜索了控制器规格并得知,它已被删除,没有任何替换。这种类型的规格应该如何替换?
【问题讨论】:
标签: ruby-on-rails testing rspec ruby-on-rails-5
我在 use_route 中搜索了控制器规格并得知,它已被删除,没有任何替换。这种类型的规格应该如何替换?
【问题讨论】:
标签: ruby-on-rails testing rspec ruby-on-rails-5
请看一下这个https://relishapp.com/rspec/rspec-rails/v/3-2/docs/controller-specs/engine-routes-for-controllers
弃用警告:不推荐在功能测试中传递 use_route 选项。处理方法(以及相关的 get、head、post、patch、put 和 delete 助手)中对这个选项的支持将在下一个版本中删除,无需替换。功能测试本质上是控制器的单元测试,它们不应该需要知道如何配置应用程序的路由。相反,您应该将适当的参数显式传递给 process 方法。以前,引擎指南还包含一个不正确的示例,建议使用此选项在虚拟应用程序中测试引擎的控制器。该建议不正确,现已更正。相反,您应该使用 Foo::Engine.routes 覆盖测试用例中的 @routes 变量。有关详细信息,请参阅更新的引擎指南。
【讨论】:
聚会有点晚了,但对于我们未来的谷歌人来说,请看这里:https://relishapp.com/rspec/rspec-rails/docs/routing-specs
路由规范由 :type => :routing 标记,或者如果您已设置 config.infer_spec_type_from_file_location!通过将它们放在规范/路由中。 只有标准 RESTful 路由的简单应用程序不会从中获得太多价值 路由规范,但它们在用于指定时可以提供重要的价值 自定义路线,例如虚荣链接、slugs 等。
expect(:get => "/articles/2012/11/when-to-use-routing-specs").to route_to(
:controller => "articles",
:month => "2012-11",
:slug => "when-to-use-routing-specs"
)
所以您可以照常使用post :index, params: {}, format: :json 并检查您的路由是否有效,例如当你有一些自定义,如上面链接中描述的get "/controller_name/ENV.fetch('TOKEN')", to: 'controller_name#my_action'。
或者你做request-specs,他们支持post 'https://lvh.me/my/fancy/url', params: {}.to_json
注意如何定义您期望的json 格式化参数的区别。
【讨论】: