简体   繁体   中英

RSpec respond_to does not work

This is my code snippet to test the polymorphic relationship.

I wrote test as below.

require 'rails_helper'

RSpec.describe Proration, type: :model do
  let(:invoice_item) { FactoryGirl.create(:proration_invoice_item) }
  subject { :invoice_item }

  it { should be_valid }
  it { should respond_to(:total_amount) }
  it { should respond_to(:invoice) }
  it { should respond_to(:itemable) }
end

But this errors out Failures:

  1) Proration should be valid
     Failure/Error: it { should be_valid }

     NoMethodError:
       undefined method `valid?' for :invoice_item:Symbol
     # ./spec/models/proration_spec.rb:7:in `block (2 levels) in <top (required)>'

  2) Proration Proration should respond to #total_amount
     Failure/Error: end
       expected :invoice_item to respond to :total_amount
     # ./spec/models/proration_spec.rb:16:in `block (3 levels) in <top (required)>'

  3) Proration Proration should respond to #invoice
     Failure/Error: end
       expected :invoice_item to respond to :invoice
     # ./spec/models/proration_spec.rb:17:in `block (3 levels) in <top (required)>'

  4) Proration Proration should respond to #itemable
     Failure/Error: Unable to find matching line in /Users/toshikiinami/Desktop/billing/spec/models/proration_spec.rb
       expected :invoice_item to respond to :itemable
     # ./spec/models/proration_spec.rb:18:in `block (3 levels) in <top (required)>'

Any ideas to fix this? ( respond_to for model doesn't work.)

You defined an invoice_item using let , but as a subject you're using symbol. What you want instead is that object invoice_item , so

subject{ :invoice_item }

should be changed to

subject{ invoice_item }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM