Factory Girl and attr_accessor with validation

I have a problem with a recent change to one of my models when created
via Factory.create.

class User < ActiveRecord::Base

  attr_accessor :tc_check

  validates :tc_check, :presence => true, :acceptance => true

  ...
end

The following definition fails, when calling
Factory.create(:valid_user)

Factory.define :valid_user, :class => User do |u|
  u.email 'barry.white@test.com'
  u.phone_number '(925) 555-1212'
  u.active true
  u.tc_check true
end

It falls over on validation - Validation failed: Tc check must be
accepted (ActiveRecord::RecordInvalid)

I've also tried setting it when called create like
Factory.create(:valid_user, :tc_check => true) which has the same
result.

Any way of setting this before validation so that I can get it to pass
the tests?

Thanks
Adam

What happens if you do this:

u = Factory.build(:valid_user)
u.tc_check = true
u.save!

Luke

Thanks, but I have tried that - I get the same result.
Validation seems to get called on build as well as create.

OK, I think I have the answer.

The docs say:
http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method-i-validates_acceptance_of

... The default value is a string “1”, which makes it easy to relate to an HTML checkbox.

So simply change your factory line to this:

Factory.create(:valid_user, :tc_check => "1")

Luke

Thank you ! that was the problem... :slight_smile: