0

私は「初心者」と呼ばれるモデルを持っています。ルート.rbファイルは次のようになります。

  Myapp::Application.routes.draw do
  resources :newbies

  root to: 'static_pages#home'
  match '/about',   to: 'static_pages#about'

コントローラは次のようなものです:

  class NewbiesController < ApplicationController

    def show
      @newbie = Newbie.find(params[:id])
    end
    ......
  end

私がテストを書くとき:

require 'spec_helper'

describe "Newbie pages" do
  subject { page }
  describe "profile page" do
    let(:newbie) { FactoryGirl.create(:newbie) }
    before { visit newbie_path(newbie)}

    it { should have_selector('h1',    text: newbie.name) }
    it { should have_selector('title', text: newbie.name) }
  end
end

それは常に失敗します:

 1) Newbie pages profile page 
 Failure/Error: before { visit newbie_path(newbie)}
 NoMethodError:
   undefined method `newbie_path' for #       <RSpec::Core::ExampleGroup::Nested_2::Nested_2:0x007f97f7f33068>
 # ./spec/requests/newbie_pages_spec.rb:16:in `block (3 levels) in <top (required)>'

 2) Newbie pages profile page 
 Failure/Error: before { visit newbie_path(newbie)}
 NoMethodError:undefined method `newbie_path' for 

resources:newbiesはnewbie_pathのようなヘルパーメソッドを作成すると思いますが、なぜ未定義のメソッドと表示されるのですか?

ありがとう

4

1 に答える 1

0

rake ルートを実行する場合

初心者リソース用に生成されたルートは、期待しているものとはまったく異なります。

newbies GET    /newbies(.:format)
{:action=>"index", :controller=>"newbies"}
         POST   /newbies(.:format)
{:action=>"create", :controller=>"newbies"}

new_newby GET    /newbies/new(.:format)
{:action=>"new", :controller=>"newbies"}

 edit_newby GET    /newbies/:id/edit(.:format)
{:action=>"edit", :controller=>"newbies"}

newby GET    /newbies/:id(.:format)
{:action=>"show", :controller=>"newbies"}
 PUT    /newbies/:id(.:format)
{:action=>"update", :controller=>"newbies"}

DELETE /newbies/:id(.:format)
{:action=>"destroy", :controller=>"newbies"}

だからあなたは使うべきです

newby_path(newbie)
于 2012-04-17T06:00:34.763 に答える