我正在尝试测试服务,但是当我将参数传递给服务类时,发生了错误,rspec以错误的方式传递了值。
我的服务是:
class CheckInvitesService
def initialize(user, course)
@user = user
@course = course
end
def call
if UserCourseRegistration.exists?(user_id: @user, course_id: @course)
false
else
UserCourseRegistration.create(user_id: @user,
course_id: @course,
school_id: find_school)
end
end
private
def find_school
school = Course.find(@course).school.id
end
end
我的测试是:
require 'rails_helper'
RSpec.describe CheckInvitesService do
describe "call" do
context 'invite already exists' do
it 'return' do
@current_user_admin = create(:admin)
@school = create(:school, user: @current_user_admin)
@course = create(:course, user: @current_user_admin, school: @school)
# puts @course
# puts @course.id
@verify = CheckInvitesService.new(@course.id, @current_user_admin.id).call
expect(@verify).to be_falsey
end
end
end
end
我打印了@course.id
,它返回:122
但是当我调用服务类时,其中的参数具有另一个值,例如@course.id
,我传递的值是:627
我收到以下错误:
失败:
1)CheckInvitesService调用邀请已存在返回 失败/错误:学校= Course.find(@course).school.id
ActiveRecord::RecordNotFound: Couldn't find Course with 'id'=627
进入该类的是另一个ID,当然是ID 627,而不是应该通过参数传递的122。
答案 0 :(得分:1)
看来您的论点错了。 CheckInvitesService具有:
initialize(user, course)
但是,当您创建CheckInvitesService
对象时,您将传递course
作为第一个参数。
CheckInvitesService.new(@course.id, @current_user_admin.id).call
应该是
CheckInvitesService.new(@current_user_admin.id, @course.id).call
答案 1 :(得分:0)
您可以在服务中使用find_or_create_by
,它也应该起作用。
def call
UserCourseRegistration.find_or_create_by(user: @user, course: @course, school: find_school)
end