2016-12-31 7 views
0

ポイントシステムを実装しました。ユーザーがログインしたときにUser.pointが2増加します。私の開発セッションコントローラは以下の通りです。セッション中のRspecエラーがポイントシステムで発生する

class Users::SessionsController < Devise::SessionsController 
     after_action :add_point, only: [:create] 
     # POST /resource/sign_in 
     def create 
      super 
     end 
     private 

     def add_point 
      resource.rewards.create(point: 2) 
    end 

    end 

およびMy spec/controllers/users_controller_spec.rbは以下のとおりです。

RSpec.describe UsersController, type: :controller do 
    describe 'adds 2 point with login' do 
    before do 
     @user=create(:user) 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
    end 
    it 'adds 2 point in one day if two times login' do 
     expect{post :create, params: {email: @user.email ,password: @user.password} }.to change {@user.points}.by(0) 
    end 
    it 'adds 4 point in two day ' do 
     expect{post :create, params: {email: @user.email ,password: @user.password} }.to change {@user.points}.by(2) 
    end 
    end 
end 

とmy model/user.rbは以下のとおりです。

class User < ActiveRecord::Base 
     def points 
      self.rewards.sum(:point) 
     end 
    end 

私はrspecコマンドを実行したときにこのエラーが発生しました。

 Failure/Error: expect{login_user(@user)}.to change {@user.points}.by(2) 
     expected result to have changed by 2, but was changed by 0 

このアプリケーションの観点から、@ user.pointsが2増加したことを確認しました。このエラーが発生するのはなぜですか?教えてください。あなたは、最新のを追跡するために、ユーザーオブジェクトをreloadする必要が

答えて

1

を変更し、私はこれがポイント

post :create, params: {email: @user.email ,password: @user.password} 
@user.reload 
expect(@user.points).to eql 2 
+0

の変更を追跡することができると思うああ、sorry.Iはそれを試してみましたが、それはうまくいきませんでした。 –

関連する問題