Mohamad
Mohamad

Reputation: 35349

How to write a reusable shared example in RSpec

I keep getting a wrong number of arguments (1 for 0) every time I run this. What am I doing wrong?

describe Payment do
  before  { @payment = build_stubbed(:payment) }
  subject { @payment }

  shared_examples 'a foreign key' do |key|
    it "can't be nil, blank, or not an int" do
      [nil, "", " ", "a", 1.1].each do |value|
        @payment.send key, value
        @payment.should_not be_valid
      end
    end
  end

  describe "validation" do
    describe "order_id" do
      it_behaves_like 'a foreign key', :order_id
    end
  end
end

Failure message:

1) Payment validation order_id behaves like a foreign key can't be nil, blank, or not an int
     Failure/Error: @payment.send(key, value)
     ArgumentError:
       wrong number of arguments (1 for 0)
     Shared Example Group: "a foreign key" called from ./spec/models/payment_spec.rb:27
     # ./spec/models/payment_spec.rb:18:in `block (4 levels) in <top (required)>'
     # ./spec/models/payment_spec.rb:17:in `each'
     # ./spec/models/payment_spec.rb:17:in `block (3 levels) in <top (required)>'

Upvotes: 0

Views: 155

Answers (1)

Mohamad
Mohamad

Reputation: 35349

I was not providing the setter method correctly: @payment.send(key, value)

Instead, I need to use @payment.send("#{key}=", value)

Upvotes: 1

Related Questions