Question

I'm trying to get a simple test up and running with rspec + fabrication. Unfortunately, not too many decent articles on this.

In spec/model/event_spec.rb

require 'spec_helper'

describe Event do
  subject { Fabricate(:event) }

  describe "#full_name" do
    its(:city) { should == "LA" }
  end

end

In spec/fabricators/event_fabricator.rb

Fabricator(:event) do
  user { Fabricate(:user) }

  # The test works if I uncomment this line:
  # user_id 1

  city "LA"
  description "Best event evar"
end

In spec/fabricators/user_fabricator.rb

Fabricator(:user) do
  name 'Foobar'
  email { Faker::Internet.email }
end

I keep getting:

 1) Event#full_name city 
     Failure/Error: subject { Fabricate(:event) }
     ActiveRecord::RecordInvalid:
       Validation failed: User can't be blank

PS if anyone knows of any online articles / tutorials worth a read on getting started with rspec and fabrication. Do let me know

Was it helpful?

Solution

One of the features of Fabricator is that it lazily generates associations, meaning that your User won't get generated unless the user accessor is called on the Event model.

It looks like your Event model has a validation which requires a User to be present. If this is the case, you need to declare your fabricator like this:

Fabricator(:event) do
  # This forces the association to be created
  user!
  city "LA"
  description "Best event evar"
end

This ensures that the User model is created along with the Event, which will allow your validations to pass.

see: http://fabricationgem.org/#!defining-fabricators

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top