簡體   English   中英

RSPEC錯誤:預期的#<>得到了#<>(使用==進行比較)-Ruby on Rails

[英]RSPEC error: expected #<> got #<> (compared using ==) - Ruby on Rails

我正在用紅寶石上的RSPEC測試我的控制器。 這是我正在測試的(控制器的相關部分)操作,

控制器代碼:

 before do 
    @company=FactoryGirl.create(:company)
    @customer=FactoryGirl.create(:customer, company_id: @company.id)
    @job=FactoryGirl.create(:job, customer_id: @customer.id, company_id:  @company.id)
  end

class JobsController < ApplicationController
  def new
    if params[:customer_id]
      @job = current_member.company.jobs.new(
        customer_id: params[:customer_id],
        lead_id: params[:lead_id]
      )
     else
      ...
     end
    ...
  end

RSPEC代碼:

   it "has valid job with customer_id param" do 
      get :new, {:customer_id=>@customer.id, :lead_id=>@job.lead_id}
      expect(assigns(:job)).to eq @member.company.jobs.new(customer_id:@customer.id, lead_id:@job.lead_id)
    end

這是我得到的錯誤:

Failures:

   1) Failure/Error: expect(assigns(:job)).to eq @member.company.jobs.new(customer_id:@customer.id, lead_id:@job.lead_id)

   expected: #<Job id: nil, name: nil, status: "pending", company_id: 43, account_id_old: nil, job_type_id: nil, address_id: nil, trade_id: nil, lead_id: nil, started_date: nil, end_date: nil, created_at: nil, updated_at: nil, order_number: nil, creator_id: nil, account_id: nil, customer_id: 22, contact_id: nil>
        got: #<Job id: nil, name: nil, status: "pending", company_id: 43, account_id_old: nil, job_type_id: nil, address_id: nil, trade_id: nil, lead_id: nil, started_date: nil, end_date: nil, created_at: nil, updated_at: nil, order_number: nil, creator_id: nil, account_id: nil, customer_id: 22, contact_id: nil>

   (compared using ==)

我不明白,“預期”和“獲得”部分似乎是同一回事! 想法/幫助嗎?

僅僅因為數據相同,並不意味着它們是同一對象(不是)。

您確實需要單獨檢查有關已分配對象的各種信息,例如:

before { get :new, { customer_id: @customer.id, lead_id: @job.lead_id } }

subject(:job) { assigns :job }

it { is_expected.to be_a_new Job }

it "should have the right customer_id" do
  expect(job.customer_id).to eq @customer.id
end

it "should have the right lead_id" do
  expect(job.lead_id).to eq @job.lead_id
end

...類似的東西。

由於兩個對象均未保存,並且您實際上不想測試它們是否完全相同,因此可以檢查它們的屬性是否匹配,比較將在兩個散列之間進行

it "has valid job with customer_id param" do 
  get :new, {:customer_id=>@customer.id, :lead_id=>@job.lead_id}
  expect(assigns(:job).attributes).to eq @member.company.jobs.new(customer_id:@customer.id, lead_id:@job.lead_id).attributes
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM