ArgumentError: Factory не зарегистрировано

Я пытаюсь запустить factory девушку для запуска с помощью rspec в моем приложении 4.1.1 rails.

Проблема в том, что я запускаю rspec в моей командной строке, я получаю Failure/Error: verse = build(:verse) ArgumentError: Factory not registered: verse.

Я теряюсь, потому что я проверил начальную страницу девушки factory, и многие ответы здесь на SO и я до сих пор не могу исправить эту проблему.

в моем Gemfile:

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

my spec_helper.rb файл:

require 'factory_girl_rails'
RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end

спецификации/контроллеры/API/verses_controller_spec.rb

describe "API Controller" do
  describe "show a verse" do
    it "should return status 200" do
      verse = build(:verse)
      get :show, id: verse.id
      expect(response).to have_http_status(200)
    end
    it "should return json object" do
      verse = build(:verse)
      get :show, id: verse.id
      JSON.parse(response.body).should == {'id' => verse.id}
    end
  end
end

спецификации/фабрики/verses.rb

FactoryGirl.define do
  factory :verse do
    line1 "A beautiful verse I stand"
  end
end

Почему моя factory загрузка не выполняется правильно? Файлы в папке spec/factory должны загружаться автоматически.

Ответы

Ответ 1

Кажется, что проблема связана с использованием rspec/ factory девушки с spring.

Добавление:

config.before(:all) do
  FactoryGirl.reload
end

в моей spec_helper.rb решила проблему.

Кредит: https://github.com/rails/spring/issues/88

Edit:

Еще один способ устранить проблему - вручную сообщить factory Girl, где загрузить factory. Добавьте это в свой spec_helper:

FactoryGirl.definition_file_paths = [File.expand_path('../factories', __FILE__)]
FactoryGirl.find_definitions

Ответ 2

Кажется, это проблема с Factory Girl. Я исправил его (согласно отчету о проблеме) с помощью FactoryGirl.find_definitions:

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods

  config.before do
    FactoryGirl.find_definitions
  end
end

Ответ 3

Это не обязательно связано с Spring. Существует issue, что означает, что factory_girl загружает пути, немного отличающиеся от rspec. Решение состоит в том, чтобы добавить к rails_helper следующее

FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
FactoryGirl.find_definitions

Предполагая, что помощник находится в файле engine_root/spec.

Это происходит, когда вы используете rspec в движке rails.