【问题标题】:Rspec request spec ActionController::RoutingErrorRspec 请求规范 ActionController::RoutingError
【发布时间】:2018-10-16 06:05:29
【问题描述】:

我正在尝试在 Rspec 中重写我的测试,并且一直在尝试对用户进行更新。 我确定这是我忽略的一件愚蠢的事情,但我到处寻找,找不到答案。

这是我的规范文件:

require 'spec_helper'

describe UsersController, type: [:request, :controller]  do

before(:each) { host! 'localhost:3000/' }

describe "#update" do

it "doesn't update user" do
  form_params = {
    params: {
    id: 1,
    email: "hello@example",
    name: "hello"
    }
  }
  patch :update, params: form_params


    end
  end
end

似乎 :update 部分是错误的,但据我在路线中看到的,没有其他方法可以调用它。

这是错误:

ActionController::RoutingError: No route matches [PATCH] "/update"

这是我的路线:

       new_user GET    /users/new(.:format)                    users#new
      edit_user GET    /users/:id/edit(.:format)               users#edit
           user GET    /users/:id(.:format)                    users#show
                PATCH  /users/:id(.:format)                    users#update
                PUT    /users/:id(.:format)                    users#update
                DELETE /users/:id(.:format)                    users#destroy

这是我的旧测试:

  test "should redirect update when not logged in" do
    patch user_path(@user), params: { user: { name: @user.name, email: @user.email } }
    assert_not flash.empty?
    assert_redirected_to login_url
  end

如果你们可能知道 - 我如何将 assert_not flash.empty? 转换为 Rspec? 提前非常感谢!

【问题讨论】:

    标签: ruby-on-rails rspec tdd rspec-rails


    【解决方案1】:

    首先,您不能在type: [:request, :controller] 中使用多种类型。如果你想编写请求规范,你必须指定命名路由(user_path)或url(“/users/:id”)

    require 'spec_helper'
    describe UsersController, type: :request  do
      describe "#update" do
        let(:user) { create :user } # or use fixtures here
    
        # I'm just a bit confused here, why it should not update?
        it "doesn't update user" do
          patch user_path(user), email: "hello@example", name: "hello"
          expect(flash.empty?).to eq false
          expect(response).to redirect_to login_path
        end
      end
    end
    

    【讨论】:

    • 非常感谢@Vasilisa!这行得通,抱歉名称不清楚 - 它应该是“当用户未登录时它会重定向更新”。
    • @MaayanNaveh,乐于助人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多