Rspec 请求规范 ActionController::RoutingError
Rspec request spec ActionController::RoutingError
我正在尝试重写我在 Rspec 中的测试,但一直坚持尝试对用户进行更新。
我敢肯定这是我忽略的一件愚蠢的事情,但我到处都看过,找不到答案。
这是 myspec 文件:
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?
提前致谢!
首先,您不能在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
我正在尝试重写我在 Rspec 中的测试,但一直坚持尝试对用户进行更新。 我敢肯定这是我忽略的一件愚蠢的事情,但我到处都看过,找不到答案。
这是 myspec 文件:
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?
提前致谢!
首先,您不能在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