0

しばらくの間、これを理解しようとしてきましたが、うまくいかないようです。これが私が得ているrspecエラーです:

 1) UsersController POST create with valid parameters creates a new user
     Failure/Error: expect {post :create, user}.to change(User, :count).by 1
       count should have been changed by 1, but was changed by 0
     # ./spec/controllers/users_controllers_spec.rb:36:in `block (4 levels) in <top     
(required)>'

users_controllers_spec での関連するテストは次のとおりです。

describe UsersController do
  let(:user) {FactoryGirl.create :user}

  context 'POST create' do 

   context 'with valid parameters' do 
    before {post :create, user}
    let(:user) {FactoryGirl.build :user}


    it 'creates a new user' do 
     expect {post :create, user}.to change(User, :count).by 1
    end


   it {should respond_with 200}
 end

そして、ここに私の users_controller create メソッドがあります:

def create
   @user = User.new(params[:user])
    if @user.save
     sign_in @user
     flash[:success] = "Welcome #{@user.name.capitalize}! Please complete your profile."
     redirect_to profile_path(current_user)
   else
    render :new
  end
end

また、ここに私の factory.rb ファイルがあります。

FactoryGirl.define do 
  factory :user do 
    name  "John"
    email "John@example.com"
    password  "password"
    password_confirmation "password"
  end
end

私は何が欠けていますか?本当に当たり前のことのように感じますが、理解できないようです。どんな助けでも大歓迎です。

4

1 に答える 1

0

テストには を使用して 2 番目のユーザーを作成することが含まれFactoryGirlますが、電子メールが最初のユーザーと同じであり、その属性に一意性検証があるため、2 番目のユーザーの作成は失敗します。

最初のユーザーをまったく作成しないか、電子メールを別のものにする必要があります (たとえば、電子メール パラメータをFactoryGirl呼び出しに渡すか、ファクトリを変更して各電子メール アドレスを一意にします)。

于 2013-08-01T18:02:56.060 に答える