'No route matches' 在 Rails 上使用 Factory Girl 时出错
'No route matches' error while using Factory Girl on Rails
我一直在尝试使用 FactoryGirl 对我的 Rails 应用程序进行测试,但我 运行 遇到了困难。
我觉得好像一定有什么地方很明显我做错了,但是经过大量搜索我还是没能找出原因。
我正在尝试 运行 测试以确认 'show' 操作在我的一个控制器上是否成功。
这是我收到的错误消息:
Failure/Error: get 'show'
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"simple_requests"}
以下是导致此结果的相关代码片段。
/spec/controllers/simple_requests_controller_spec.rb
require 'spec_helper'
describe SimpleRequestsController do
describe "GET 'show'" do
before do
@simple_request = build(:simple_request)
end
it "should be successful" do
get 'show'
expect(response).to be_success
end
end
end
/factories/simple_requests_controller_spec.rb
FactoryGirl.define do
factory :simple_request do
id 123
full_name "Testie McTesterson"
company "Test Company"
role "Analyst"
email "foobar@foobs.com"
phone "000888"
message "Test question?"
end
end
/controllers/simple_requests_controller.rb
def show
authorize SimpleRequest #For pundit
@simple_request = SimpleRequest.find(params[:id])
end
关于为什么会发生这种情况,我有两个假设:
1) Rspec 正在寻找 'show' 操作的 ID,但不知何故找不到。 (虽然工厂里有一个,但我还没有弄清楚它怎么不会流过。)
2) Pundit 导致了问题,因为 show 操作可能需要授权(尽管注释掉 'authorize' 行目前没有任何区别)
欢迎任何想法:)
编辑
粘贴在 rake 路由的输出下方 | grep simple_requests
simple_requests GET /simple_requests(.:format) simple_requests#index
POST /simple_requests(.:format) simple_requests#create
new_simple_request GET /simple_requests/new(.:format) simple_requests#new
edit_simple_request GET /simple_requests/:id/edit(.:format) simple_requests#edit
simple_request GET /simple_requests/:id(.:format) simple_requests#show
PATCH /simple_requests/:id(.:format) simple_requests#update
PUT /simple_requests/:id(.:format) simple_requests#update
DELETE /simple_requests/:id(.:format) simple_requests#destroy
编辑 2 - 添加 ID 参数
我现在也尝试添加一个id如下:
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end
这次收到如下错误信息
ActiveRecord::RecordNotFound: Couldn't find SimpleRequest with 'id'=123
'123' 是我 /factories 中的 ID - 我想我必须缺少一些东西才能让它工作,但我还不知道是什么。
试试这个:
before do
@simple_request = create :simple_request
end
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end
这是一个 show
视图,因此您必须使用 ID
提供您的请求,并且您实际上必须使用 create
而不是 build
在你的 before
块中。
您的 SimpleRequest 没有 ID。您需要使用 create 而不是 build
before do
@simple_request = create(:simple_request)
end
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end
我一直在尝试使用 FactoryGirl 对我的 Rails 应用程序进行测试,但我 运行 遇到了困难。
我觉得好像一定有什么地方很明显我做错了,但是经过大量搜索我还是没能找出原因。
我正在尝试 运行 测试以确认 'show' 操作在我的一个控制器上是否成功。
这是我收到的错误消息:
Failure/Error: get 'show'
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"simple_requests"}
以下是导致此结果的相关代码片段。
/spec/controllers/simple_requests_controller_spec.rb
require 'spec_helper'
describe SimpleRequestsController do
describe "GET 'show'" do
before do
@simple_request = build(:simple_request)
end
it "should be successful" do
get 'show'
expect(response).to be_success
end
end
end
/factories/simple_requests_controller_spec.rb
FactoryGirl.define do
factory :simple_request do
id 123
full_name "Testie McTesterson"
company "Test Company"
role "Analyst"
email "foobar@foobs.com"
phone "000888"
message "Test question?"
end
end
/controllers/simple_requests_controller.rb
def show
authorize SimpleRequest #For pundit
@simple_request = SimpleRequest.find(params[:id])
end
关于为什么会发生这种情况,我有两个假设:
1) Rspec 正在寻找 'show' 操作的 ID,但不知何故找不到。 (虽然工厂里有一个,但我还没有弄清楚它怎么不会流过。)
2) Pundit 导致了问题,因为 show 操作可能需要授权(尽管注释掉 'authorize' 行目前没有任何区别)
欢迎任何想法:)
编辑
粘贴在 rake 路由的输出下方 | grep simple_requests
simple_requests GET /simple_requests(.:format) simple_requests#index
POST /simple_requests(.:format) simple_requests#create
new_simple_request GET /simple_requests/new(.:format) simple_requests#new
edit_simple_request GET /simple_requests/:id/edit(.:format) simple_requests#edit
simple_request GET /simple_requests/:id(.:format) simple_requests#show
PATCH /simple_requests/:id(.:format) simple_requests#update
PUT /simple_requests/:id(.:format) simple_requests#update
DELETE /simple_requests/:id(.:format) simple_requests#destroy
编辑 2 - 添加 ID 参数
我现在也尝试添加一个id如下:
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end
这次收到如下错误信息
ActiveRecord::RecordNotFound: Couldn't find SimpleRequest with 'id'=123
'123' 是我 /factories 中的 ID - 我想我必须缺少一些东西才能让它工作,但我还不知道是什么。
试试这个:
before do
@simple_request = create :simple_request
end
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end
这是一个 show
视图,因此您必须使用 ID
提供您的请求,并且您实际上必须使用 create
而不是 build
在你的 before
块中。
您的 SimpleRequest 没有 ID。您需要使用 create 而不是 build
before do
@simple_request = create(:simple_request)
end
it "should be successful" do
get 'show', id: @simple_request.id
expect(response).to be_success
end