0

次のルートを定義し、次の UsersController を定義しました。 { visit signup_path } の前に試行する spec テストを実行しようとすると、次のエラーが発生します。

エラー

Failure/Error: before { visit signup_path}
     ActionController::RoutingError:
       uninitialized constant UserController
     # ./spec/requests/user_pages_spec.rb:7:in `block (3 levels) in <top (required)>'
  resources :users

ルート.rb

  resources :users
  match '/signup',  to: 'users#new'
  match '/help', to: 'static_pages#help'
  root :to => 'static_pages#help'

users_controller.rb

class UsersController < ApplicationController
  def new
  end

  def show
    @user = User.find(params[:id])
  end
end

**user_pages_spec.rb** を更新しました

 describe "UserPages" do
  subject { page }

  describe "Signup Page" do
    before { visit signup_path}

    it "Should have header Sign-up" do
      should have_selector("h1", text: "Sign-up")
      should have_selector("title", text: "Sign-up")
    end
  end

  describe "profile page" do
    let(:user) {FactoryGirl.create(:user)}
    before { visit user_path(user) }

    it { should have_selector("title", text: "#{user.name} Profile")}
    it { should have_selector("h1", text: user.name)}
  end
end

これが私のルートです:

users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
   signup        /signup(.:format)         users#new
     help        /help(.:format)           static_pages#help
     root        /                         static_pages#help

問題なく www.blah.com/signup にアクセスできます。しかし、仕様は単一の UserController を探しています。また、「/users/new」を「signup_path」に置き換えると、テストに合格します。

また、もともと私がレールジェネレーターを使用して単一バージョンを使用してコントローラー(のみ)を作成したことを追加したかった。しかし、rails destroy コントローラー スクリプトを使用してそれを発見した後、私はそれを撤回しました。次に、複数バージョンの正しい Rails ジェネレーターを発行しました。私が言ったように、それはテストが台無しにされたようですが、実際のアプリです。

4

0 に答える 0