简体   繁体   中英

How to get a simple test to run with rspec + fabrication?

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM