'没有路线匹配'在Rails上使用Factory Girl时出错

时间:2015-05-19 13:22:16

标签: ruby-on-rails ruby rspec factory-bot

我一直在尝试使用FactoryGirl进行Rails应用程序的测试,但我遇到了困难。

我觉得好像一定有​​一些相当明显的事情我做错了,但经过多次搜寻后我找不到原因。

我正在尝试进行测试,以确认该节目'我的一个控制器上的操作成功。

这是我收到的错误消息:

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'行动,但不知何故无法找到它。 (虽然工厂里有一个,但我还没弄明白它是如何流过的。)

2)专家正在引发问题,因为演出行动可能需要授权(尽管评论出“授权行”目前没有任何区别)

欢迎任何和所有的想法:)

修改

在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'是我/工厂的ID - 我想我必须遗漏一些东西让这个工作,但不能弄清楚到底是什么。

2 个答案:

答案 0 :(得分:3)

试试这个:

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提供请求,并且您必须使用{{1}实际创建记录而不是create块中的build

答案 1 :(得分:3)

您的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