2017-10-06 1 views
0

Ich habe eine Spezifikation und eine Fabrik und ich diese Störung erhalte:Rspec und factory: SystemStackError: Stack-Ebene zu tief Schienen

SystemStackError: stack level too deep 
    from gems/activerecord-4.2.1/lib/active_record/relation/delegation.rb:9:in `relation_delegate_class'  

Wenn ich versuche, die verbage zu verwenden ‚bauen‘ es funktioniert; aber ich brauche es zu speichern, um Daten zu testen und "create" funktioniert nicht in let!(:user) { create(:user) }, da es diesen Fehler auslöst. Rspec scheint gut zu funktionieren.

Ich laufe Ruby 2.2.2; mit rspec und Fabrik Mädchen

require 'spec_helper' 
describe API::V1::CurrentUserController do 
    let!(:user) { create(:user) } 
    setup_api_authorization 

    describe "GET 'show'" do 
    before (:each) do 
    setup_api_headers 
    get 'show', subdomain: 'api', id: 'me' 
    end 
end 


FactoryGirl.define do 
    factory :user, aliases: [:participant] do 
    sequence(:email) { |n| "user#{n}@example.com" } 
    first_name { Faker::Name.first_name } 
    last_name { Faker::Name.last_name } 
    password 'testpass' 
    password_confirmation { |user| user.password } 
    role_id {4} 
end 
end 
+1

Bitte zeigen Sie Ihre 'User' Modell. Haben Sie Callbacks wie 'after_create',' after_commit' usw.? –

+0

Das Spezifikationsbenutzermodell oder die App ein – eWadeMan

+0

Modell aus 'app/models'. –

Antwort

0

Zur Einrichtung Assoziationen können Sie nur den Namen der Fabrik nennen:

FactoryGirl.define do 
    factory :user, aliases: [:participant] do 
    sequence(:email) { |n| "user#{n}@example.com" } 
    first_name { Faker::Name.first_name } 
    last_name { Faker::Name.last_name } 
    password 'testpass' 
    password_confirmation { password } 
    role 
    end 
end 

nie IDs in Ihre Fabriken hart codieren - Sie einstellen, sich nur für eine Welt nach oben von Schmerz.

Wenn Sie Rolify verwenden Sie einen Rückruf einer Rolle zu einem Benutzer verwenden können, anstatt hinzuzufügen:

FactoryGirl.define do 
    factory :user, aliases: [:participant] do 
    sequence(:email) { |n| "user#{n}@example.com" } 
    first_name { Faker::Name.first_name } 
    last_name { Faker::Name.last_name } 
    password 'testpass' 
    password_confirmation { password } 
    after(:create) { |user| user.add_role(:peasant) } 
    end 
end 
+0

Ok, ich versuche nur zu verstehen, warum der Stack-Level zu tief passiert. Es liest also von meinem Modell und warum wirft es diesen Fehler? – eWadeMan

+0

Können Sie mir bitte erklären, was ich oben geschrieben habe – eWadeMan

0

This error generally happens when you accidentally recursively changing an attribute. If you have a username attribute in User model, and a virtual attribute named username, that is directly changing the username, you end up calling the virtual, the virtual calls the virtual again and so on.. Therefore, take a look on whether something like that happens somewhere in your code.

Stack level too deep error in Ruby on Rails