keruilin
keruilin

Reputation: 17512

RSpec - how to test default value for attribute using callback

Here's my test:

require 'spec_helper'

describe League do

    it 'should default weekly to false' do
      league = Factory.create(:league, :weekly => nil)
      league.weekly.should == false
    end
  end

end

And here's my model:

class League < ActiveRecord::Base

  validates :weekly, :inclusion => { :in => [true, false] }

  before_create :default_values

  protected

  def default_values
    self.weekly ||= false
  end

end

When I run my test, I get the following error message:

 Failure/Error: league = Factory.create(:league, :weekly => nil)
 ActiveRecord::RecordInvalid:
   Validation failed: Weekly is not included in the list

I've tried a couple different approaches to trying to create a league record and trigger the callback, but I haven't had any luck. Is there something that I am missing about testing callbacks using RSpec?

Upvotes: 1

Views: 4389

Answers (1)

Kyle Heironimus
Kyle Heironimus

Reputation: 8041

I believe that what you are saying is, before create, set weekly to false, then create actually sets weekly to nil, overwriting the false.

Just do

require 'spec_helper'

describe League do

    it 'should default weekly to false' do
      league = Factory.create(:league)  # <= this line changed
      league.weekly.should == false
    end
  end

end

in your test. No need to explicitly set nil.

Upvotes: 2

Related Questions