2016-12-07 1 views
1

내 레일 응용 프로그램에서 Service, Request 및 ServiceRequest 모델이 있습니다."[Class_Name]이 (가) 존재해야합니다"rails 5 rspec testing associations

연관은 servicerequests가 서비스 및 요청에 속하는 것과 같습니다.

require "rails_helper" 

describe Servicerequest, :type => :model do 

    subject { 
    described_class.new(userid: 'bbogus', status: 'new', request_id: 1, service_id: 3) 
    } 

    it "is valid with valid attributes" do 
    expect(subject).to be_valid 
    end 

    it "is not valid without a userid" do 
    subject.userid = nil 
    expect(subject).to_not be_valid 
    end 

    it "is not valid without a status" do 
    subject.status = nil 
    expect(subject).to_not be_valid 
    end 

    it "is not valid without a request_id" do 
    subject.request_id = nil 
    expect(subject).to_not be_valid 
    end 

    it "is not valid without a service_id" do 
    subject.service_id = nil 
    expect(subject).to_not be_valid 
    end 

    it { should belong_to(:request)} 
    it { should belong_to(:service)} 
end 

및 서비스 요청 모델

:

1) Servicerequest is valid with valid attributes 
    Failure/Error: expect(subject).to be_valid 
    expected #<Servicerequest id: nil, created_at: nil, updated_at: nil, userid: "bbogus", status: true, request_id: 1, service_id: 3> to be valid, but got errors: Request must exist, Service must exist 
    # ./spec/models/servicerequest_spec.rb:10:in `block (2 levels) in <top (required)>' 
: 어떤 이유로 FO

class Servicerequest < ApplicationRecord 
    validates_presence_of :userid, :status, :request_id, :service_id 

    belongs_to :request, class_name: "Request" 
    belongs_to :service, class_name: "Service" 
end 

, 내 시험이 문을 실패 RSpec에와 servicerequests을 테스트 할 때

,이이

시험에 Request must exist. Service must exist. 부분을 통과 시키려면 어떻게합니까?

답변

2

귀하의 사양은 여기 service_idrequest_id에 대한 ID를 지정합니다

request_id: 1, service_id: 3 

하지만 이것들은 데이터베이스에있는 실제 저장 서비스/요청 모델에 해당하지 않는 - 3의 ID와 어떤 서비스가없는 즉, 또는 ID가 1 인 요청입니다. 오류 메시지가 참조하는 것입니다.

실제로 만들 수도 있고 메시지가 사라질 수도 있습니다. 예 :

let(:service) { Service.create(<valid service params go here>) } 
let(:request) { Request.create(<valid request params go here>) } 
subject { 
    described_class.new(userid: 'bbogus', status: 'new', request_id: request.id, service_id: service.id) 
} 
+1

고맙습니다. 완벽하게 일했습니다. – Avir94

+0

나는 비슷한 오류가 있었으며 완벽하게 작동합니다. 고마워요! – nrmb