2016-12-07 6 views
1

私のレールアプリケーションでは、Service、Request、およびServiceRequestモデルがあります。"[Class_Name]が存在する必要があります" rails 5 rspec testing associations

関連付けは、servicerequestsがServiceとRequestの両方に属しているようなものです。

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 

とのServiceRequestモデルで

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のRequestを返します。これがエラーメッセージの参照先です。

実際に作成することもできますが、メッセージは消えます。 例:

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

関連する問題