Как правильно настроить и использовать factory_girl_rails? - PullRequest
1 голос
/ 29 марта 2012

Мне кажется, у меня проблема с настройкой FactoryGirl с рельсами.Сначала я следовал за ASCIIcasts # 275: как я тестирую , но рейк дает мне NameError: uninitialized constant ...

Я что-то упустил?Возможно ли, что какой-то конфигурационный файл неправильный?Я довольно новый для RSpec и Rails.

Я использую Rails 3.2.2 + Mongoid + RSpec + factory_girl_rails .

Ошибка:

Failures:

  1) User should save user with valid required fields
     Failure/Error: let(:user) { FactoryGirl.build(:valid_user) }
     NameError:
       uninitialized constant ValidUser
     # ./spec/models/user_spec.rb:4:in `block (2 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:7:in `block (2 levels) in <top (required)>'

spec / фабрики.* spec / models / user_spec.rb

require 'spec_helper'

describe User do
  let(:user) { FactoryGirl.build(:valid_user) }

  it "should save user with valid required fields" do
    user.should be_valid
  end
end

spec / spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.infer_base_class_for_anonymous_controllers = false

  config.include FactoryGirl::Syntax::Methods
end

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Обычно полезно вывести всю ошибку или хотя бы целое первое предложение - вы даже не сказали нам, что такое отсутствующая константа!

ОБНОВЛЕНИЕ: Спасибо за всю ошибку.Когда вы определяете factory: valid_user, Factory Girl автоматически предполагает, что это для модели с именем ValidUser.Чтобы обойти это, вы можете либо назвать свою фабрику :user (при условии, что у вас модель User), либо вы можете попробовать:

FactoryGirl.define do
  factory :valid_user, :class => User do
    name     'somename'
    email    'a@b.com'
    password 'somepassword'
  end
end

В качестве альтернативы, если вы хотите иметь пару различных типовПользовательские фабрики, вы можете использовать:

FactoryGirl.define do
  factory :user do
    # set some attrs
  end

  factory :valid_user, :parent => :user do
    name     'somename'
    email    'a@b.com'
    password 'somepassword'
  end

  factory :invalid_user, :parent => :user do
    # some other attrs
  end
end
1 голос
/ 29 марта 2012

Вы можете объявить фабрику вот так ........

 Factory.define :organization do |g|
   g.name 'Test Organization'
   g.phone_number '5345234561'
   g.website_url 'www.testorg.com'
   g.city 'chichago '
   g.association :state

 end

И используйте это в Organization_spec, как это .....

require 'spec_helper'

 describe Organization do
    before :each do
     @state = Factory :state
     @organization = Factory :organization ,:state => @state
    end

  it "should be invalid without a name" do
    @organization.name = nil
    @organization.should_not be_valid
 end

end

И наслаждайтесь !!!!!!!!!!!!!!!!

...