【问题标题】:ArgumentError: unknown keyword: use_route after rails 5 upgradeArgumentError:未知关键字:rails 5 升级后的 use_route
【发布时间】:2017-08-12 07:18:20
【问题描述】:

我在 use_route 中搜索了控制器规格并得知,它已被删除,没有任何替换。这种类型的规格应该如何替换?

【问题讨论】:

    标签: ruby-on-rails testing rspec ruby-on-rails-5


    【解决方案1】:

    请看一下这个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 变量。有关详细信息,请参阅更新的引擎指南。

    【讨论】:

      【解决方案2】:

      聚会有点晚了,但对于我们未来的谷歌人来说,请看这里: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 格式化参数的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 2016-11-02
        • 2018-03-24
        相关资源
        最近更新 更多