15 Stimmen

FactoryGirl: Factory nicht registriert: Benutzer (ArgumentError)

Ich habe große Schwierigkeiten, alle Enten in der richtigen Reihenfolge mit FactoryGirl zu bekommen.

Ich habe eine minimalistische Rails-App (3.0.11) eingerichtet, factory_girl_rails (1.4.0), factory_girl (2.3.2) & cucumber-rails (1.2.1) und ruby-1.8.7-p352.

Der Cucumber-Test lautet wie folgt:

Feature: a
  Scenario: test factory-girl
    Given the following user exists:
    | name    | email               |
    | Brandon | brandon@example.com |

Das Ergebnis ist folgendes:

cucumber 
Using the default profile...
"Adam Advertiser"
"a@b.com"
#
Feature: a

  Scenario: test factory-girl        # features/users.feature:2
    Given the following user exists: # factory_girl-2.3.2/lib/factory_girl/step_definitions.rb:100
      | name    | email               |
      | Brandon | brandon@example.com |
      **Factory not registered: user (ArgumentError)**
      features/users.feature:3:in `Given the following user exists:'

Failing Scenarios:
cucumber features/users.feature:2 # Scenario: test factory-girl

1 scenario (1 failed)
1 step (1 failed)
0m0.107s

Es scheint ein Problem mit der Ladereihenfolge zu geben. Über jede Hilfe, um das richtig hinzubekommen, würde ich mich freuen. Grüße Ross

features/Factories.rb sieht folgendermaßen aus:

FactoryGirl.define do
    factory :user do
        name 'Adam Advertiser'
        email 'a@b.com'
    end
end
pp FactoryGirl.create(:user)

require 'factory_girl/step_definitions'

Mein features/support/env.rb sieht so aus:

require 'pp'
require 'cucumber/rails'

require 'factory_girl_rails'

Mein GemFile sieht so aus:

source 'http://rubygems.org'

gem 'rails', '3.0.11'

gem 'sqlite3'

group :development, :test do

    gem 'cucumber-rails'
    gem 'factory_girl_rails'     # rails 3 version

33voto

pagid Punkte 12823

Aufrufen von FactoryGirl.find_definitions direkt nach dem require 'factory_girl_rails' hat ein ähnliches Problem für mich behoben.

Siehe Kann factory_girl unter Rails 3.0.5 nicht zum Laufen bringen, unerwartete tCONSTANT

0voto

Jignesh Gohel Punkte 5854

Ich bin neu bei FactoryGirl und ich hatte einen ähnlichen Fehler wie in diesem Beitrag erwähnt.Der Fehler, mit dem ich konfrontiert war, lautete

 ArgumentError:
   Nicht registriert: client

Factory-Setup:

/spec/factories.rb

Factory.define :user do |f|
  f.email { Faker::Internet.email }
  f.first_name { Faker::Name.first_name }
  f.last_name { Faker::Name.last_name }
  f.phone { Faker::PhoneNumber.phone_number }
  f.password "foobar"
end

/spec/factories/users.rb - Enthielt Kind-Factorys für :user

Factory.define :client, :parent => :user do |client|
  client.email                    { Factory.next(:client_email) }
  client.password                 "password"
  client.password_confirmation    "password"
end

Ich habe das Spec mit dem folgenden Befehl ausgeführt:

    app_root$ RAILS_ENV=custom_test bundle exec rspec spec/controllers/users_controller_spec.rb 

Danke an @Ross. Die im Gem-File gezeigte Datei hat mich darauf aufmerksam gemacht, was fehlte.

Vielen Dank.

0voto

Rubyrider Punkte 3508

Ich löste dieses Problem einfach, indem ich diese Zeilen in meinem spec_helper hinzufügte:

require 'factory_girl'
FactoryGirl.find_definitions

0voto

neurodynamic Punkte 3859

Gemäß diese Antwort funktioniert es, wenn man FactoryGirl.find_definitions hinzufügt, aber wenn du das nicht gemacht hast, sollte das Hinzufügen von require 'rails_helper' die Notwendigkeit dafür beseitigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X