无法让任何FactoryGirl工厂注册

时间:2013-11-30 09:20:46

标签: ruby-on-rails-3 rspec factory-bot

我正在尝试在现有的Rails 3项目上设置Rspec和FactoryGirl,该项目以前没有自动化测试。

我在运行测试时遇到的错误是Factory not registered: admin

我不明白为什么这会失败,通过我使用工厂的规格进行每次测试都会发生。

/Gemfile.rb (为了简洁而连接)

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

/config/application.rb (为了简洁而连接)

config.generators do |g|
  g.test_framework :rspec, fixture: true
  g.fixture_replacement :factory_girl, dir: "spec/factories"
end

/spec/spec_helper.rb

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

HTTPI.log = false

FactoryGirl.factories.clear

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

RSpec.configure do |config|
  config.mock_with :rspec
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false

  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
  config.include Devise::TestHelpers, type: :controller
  config.extend ControllerMacros, type: :controller
end

/spec/support/controller_macros.rb

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      sign_in FactoryGirl.create(:admin)
    end
  end
end

/spec/factories/users.rb

FactoryGirl.define do
  factory :admin do
    sequence(:email) {|n| "user#{n}@local.test"}
    password "password"
    password_confirmation "password"
    association :user_role, factory: :admin_role

    trait :as_reseller do
      association :user_role, factory: :reseller_role
    end

    trait :as_customer do
      association :user_role, factory: :customer_role
    end
  end

  factory :reseller, parent: :admin do
    as_reseller
  end

  factory :customer, parent: :admin do
    as_customer
  end
end

/spec/controllers/accounts_controller_spec.rb

describe AccountCodesController do
  describe "as administrator" do
    login_admin

    describe "GET 'index'" do
      it "returns http success" do
        get 'index'
        response.should be_success
      end
    end
  end
end

2 个答案:

答案 0 :(得分:0)

链接上的解释

稳定的文档在这里:

http://github.com/thoughtbot/factory_girl/tree/1.3.x

答案 1 :(得分:0)

这一行FactoryGirl.factories.clear让我很困惑。

根据doc,你不需要做任何spec_helper修改(如果你在Rails应用程序和Bundle中使用它)。

这是我的一个APP中的spec_helper,我成功使用了工厂。