1

私は factory_girl 初心者であり、工場が「登録」されていない理由を特定できませんでした。どこに登録されているか不明。

Gemfile の関連部分:

...
group :development, :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :test do
  gem 'faker'
  gem 'capybara'
  gem 'guard-rspec'
  gem 'launchy'
end
...

config/application.rb の関連部分:

...
module Appname
  class Application < Rails::Application
    ...
    config.generators do |g|
      g.test_framework :rspec,
        :fixtures => true,
        :view_specs => false,
        :helper_specs => false,
        :routing_specs => true,
        :controller_specs => true,
        :request_specs => true
      g.fixture_replacement :factory_girl, :dir => "spec/factories"
    end
    ...
  end
end

spec/models/user_spec.rb の関連部分:

require 'spec_helper'

describe User do
  it "has a valid factory" do
    FactoryGirl.create(:user).should be_valid
  end
  ...
end

$rspec spec/models/user_spec.rb の結果:

Failures:

  1) User has a valid factory
     Failure/Error: FactoryGirl.create(:user).should be_valid
     ArgumentError:
       Factory not registered: user

アップデート:

仕様/工場/users.rb:

require 'faker'

FactoryGirl.define do
  factory :contact do |f|
    f.first_name { Faker::Name.first_name }
    f.last_name { Faker::Name.last_name }
    f.email { Faker::Internet.email }
    f.password { Faker::Name.last_name }
    f.password_confirmation { Faker::Name.last_name }
  end
end

ご協力いただきありがとうございます。

4

2 に答える 2

2

コメント スレッドから: おそらく工場で次のように変更する必要がfactory :contactあります。factory :user

FactoryGirl.define do
  factory :user do |f|
    ...
  end
end
于 2012-10-27T00:26:58.020 に答える
1

これを試して、app/spec/factories/フォルダに作成user.rbして書き込みます

require 'factory_girl'

FactoryGirl.define do
  factory :user do
    lname "test12"
    fname "test12"
    ... # whatever
  end
end

そしてあなたのuser_spec.rb

describe User do
  before { @user = FactoryGirl.create(:user, :fname => "abc", :lname => "fname") }
  subject { @user }
  it { should respond_to(:fname) }
  it { should respond_to(:lname)}
  it { should be_valid }
end
于 2012-10-26T06:47:20.280 に答える