rspec传递的参数中的值错误

时间:2018-07-23 11:51:36

标签: ruby-on-rails rspec rspec-rails

我正在尝试测试服务,但是当我将参数传递给服务类时,发生了错误,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。

2 个答案:

答案 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