【问题标题】:RSpec rails return wrong pathRSpec rails 返回错误的路径
【发布时间】:2021-12-20 03:54:00
【问题描述】:

当我尝试使用 RSpec 进行测试时,我的示例不想工作,因为 post_categories_url 返回错误的路径。需要“/categories/2”,但我得到“/2/categories”

  describe "GET /show" do
    it "renders a successful response" do
      post_category = PostCategory.create! valid_attributes
      puts post_categories_url(post_category)
      binding.pry
      get post_categories_url(post_category)
      expect(response).to be_successful
    end
  end

我的路线:

  ...
  get '/:locale' => 'welcome#index'
  scope "(:locale)", locale: /en|ru/ do
    get '/user/:id' => 'users#show', as: 'user'
    get '/users' => 'users#index'
    resources :post_categories, path: 'categories'
    resources :posts, path: 'adv'
  ...

【问题讨论】:

  • 显示rails routes | grep 'post'的输出
  • 显示路由是如何定义的。告诉我们它是“错误的”并没有多大意义,因为您还没有提供方法让我们验证什么是“正确的”。
  • 我添加到问题中
  • 您可以阅读relishapp.com/rspec/rspec-rails/docs/controller-specsget :show, params: { id: post_category.id } 是您所需要的。

标签: ruby-on-rails ruby rspec


【解决方案1】:

这是一个长镜头,我有一段时间没有与路线密切合作。

你在路由上定义了这个约束:

locale: /en|ru/

如果我没记错的话,当你尝试访问它时,路由器会检查约束,所以2/categories 不会在路由中找到。

并且很可能链接助手在编写 URL 或路径时不会检查约束,因此它可能认为第一个参数是 :locale

您可以通过在 URL 帮助程序中添加 locale 选项来快速检查是否是这种情况:

 post_categories_url(post_category, locale: 'en')
 # should give ../en/categories/2 if I'm guessing right. 

假设我完全正确,那么在你的情况下你应该如何解决它并不明显。生成 URL 时可能显式 locale: 可以吗?也许defining a default locale 会起作用?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2014-02-07
    • 2018-09-08
    相关资源
    最近更新 更多