【发布时间】:2016-12-31 10:02:30
【问题描述】:
我实现了积分系统。当他登录时,User.point 增加 2。我的设计会话控制器如下。
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
我的规范/控制器/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
下面是我的模型/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。为什么我有这个错误?请告诉我。
【问题讨论】:
标签: ruby-on-rails ruby rspec devise