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 ‘[email protected]
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

On 2011-01-17, at 9:51 AM, adam wrote:

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.

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.

Thank you ! that was the problem… :slight_smile:

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