0

ruby と ruby​​ on rails を学習できるのは 2 週間だけです。現在、私の問題は、あまり理解していないルートの一致にあります。現在、rspecでテストしています:

require 'spec_helper'

describe UsersController do

it "should redirect to the user show page" do
post :create, :users => @attr
response.should redirect_to(user_path(assigns(:users)))
end
  describe "signup" do

before { visit new_user_registration_path }

let(:submit) { "Sign up" }

describe "with invalid information" do
  it "should not create a user" do
    expect { click_button submit }.not_to change(User, :count)
  end
end

describe "with valid information" do
  before do
    fill_in "Email", :with=> "user@example.com"
    fill_in "Password", :with=> "foobar"
    #fill_in "password_confirmation", :with=> "foobar"
  end

  it "should create a user" do
    expect { click_button submit }.to change(User, :count).by(1)
  end
end
end
end 

私はこれを私のUserControllerに持っています

class UsersController < ApplicationController

def new
     @user = User.new
end

def create
    @user = User.new(params[:user])
    if @user.save
        redirect_to user_session_path
    else
    redirect_to new_user_session_path
end

end

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

しかし、テストを実行すると、次のエラーが発生しました。

Failures:

1) UsersController should redirect to the user show page
   Failure/Error: response.should redirect_to(user_path(assigns(:users)))
   ActionController::RoutingError:
   No route matches {:action=>"show", :controller=>"users", :id=>nil}
   # ./spec/controllers/user_controller_spec.rb:7

2) UsersController signup with valid information should create a user
   Failure/Error: expect { click_button submit }.to change(User, :count).by(1)
   count should have been changed by 1, but was changed by 0
   # ./spec/controllers/user_controller_spec.rb:29
4

1 に答える 1

2

あなたの仕様では、ユーザー(単数)ではなくユーザー(複数)を2回参照しています:

it "should redirect to the user show page" do
  post :create, :user => @attr
  response.should redirect_to(user_path(assigns(:user)))
end

合格する必要があります。

更新

@attr が設定されていない場合は、もちろん適切に設定する必要があります。モデルのすべての属性と値を含むハッシュを提供するだけです。User モデルに属性 name と address があると仮定します。

@attr = { :name => "SomeUserName", :address => "SomeAddress"}
于 2012-07-25T14:16:57.607 に答える