0

こんにちはコミュニティ私はユーザーが(新しいユーザーとして)登録できる簡単なアプリケーションを実行しているので、ユーザーコントローラーで新しいユーザーを作成しようとしています:

class UserController < ApplicationController

def create

    @users = User.new
    if @users.save
      flash[:notice] = 'new user was successfully created.'
      redirect_to posts_path
    else
      render :action => :new
    end
  end

  def new
    @user = User.new
  end
end

これが私のrspecテストuser_controller_specです:

require 'spec/spec_helper'

describe UserController do

    it "create new user" do
        get :create
        assigns[:users].should_not be_new_record
    end
end

テストすると、次のエラーが表示されます。

失敗:

1)UserControllerは新しいユーザーを作成します

 Failure/Error: assigns[:users].should_not be_new_record

   expected nil not to be a new record
 # ./spec/controllers/user_controller_spec.rb:7

0.15482秒で終了1例、1失敗

最後にここに私のモデルがあります

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  # attr_accessible :title, :body

  has_many :cars
  validates_presence_of  :email

end
4

2 に答える 2

1

有効ではないため、レコードは保存されていません。電子メールアドレスなしでレコードが作成されないようにする検証があります。

また、作成アクションには、フォームから入力を受け取る方法がありません。

def create
  @users = User.new(params[:user]) # the params[:user] is the part you are missing
  if @users.save
    redirect_to posts_path, :notice => 'new user was successfully created.'
  else
    render :action => :new
  end
end

次に、テストで、必ずメールアドレスを割り当ててください。

get :create, :user => { :email => 'foo@example.com' }
assigns[:users].should_not be_new_record
于 2012-07-17T22:02:45.423 に答える
1

1つの問題はこれです:

get :create

Railsのリソースルーティングは、GETリクエストを作成アクションにルーティングしません。これは、作成アクションには副作用があるためです。

作成アクションをテストするには、次のことを行う必要があります。

post :create, "with" => { "some" => "params" }

コントローラをテストするときは、テールを付けることをお勧めしますlog/test.log。テストリクエストがどこにルーティングされたかがわかります。

于 2012-07-19T03:53:56.530 に答える