2016-05-20 7 views
0

So habe ich Benutzer ModellFactoryGirl.create nicht immer in spec Regler

ich es mit Gerüst schaffen

der Test in Modell-Spezifikation übergeben wird, aber es ist immer in Controller-Spezifikation nicht

meine users_controller_spec

require 'rails_helper' 

RSpec.describe Api::V1::UsersController, type: :controller do 
    describe "GET #show" do 
    before(:each) do 
     @user = FactoryGirl.create :user 
     get :show, id: @user.id 
    end 
    it { should respond_with 200 } 
    end 
end 

mein Benutzerhandbuch factory

FactoryGirl.define do 
    factory :user do 
    name "MyString" 
    sex_id 1 
    end 
end 

ich Benutzer von meiner Konsole erstellen und von meinem Benutzermodell spec

FactoryGirl.create :user 

aber es immer fehlschlagen, wenn ich es von meinem Controller spec

1) Api::V1::UsersController GET #show 
Failure/Error: @user = FactoryGirl.create :user 

ActiveRecord::InvalidForeignKey: 
    PG::ForeignKeyViolation: ERROR: insert or update on table "users" violates foreign key constraint "fk_rails_12f007df76" 
    DETAIL: Key (sex_id)=(1) is not present in table "sexs". 
    : INSERT INTO "users" 
    # ------------------ 
# --- Caused by: --- 
# PG::ForeignKeyViolation: 
# ERROR: insert or update on table "users" violates foreign key constraint "fk_rails_12f007df76" 
# DETAIL: Key (sex_id)=(1) is not present in table "sexs". 
# /home/user/.rvm/gems/ruby-2.1.8/gems/factory_girl-4.7.0/lib/factory_girl/configuration.rb:18:in `block in initialize' 
+0

Die Fehlermeldung besagt, dass _Sie keinen Sex-Datensatz mit ID 1_ haben. –

+0

yeah Ich habe zwei Modelle mit fast gleichen Attributen, aber dieses Modell besteht den Test, aber dieses Modell scheitert, ich versuche meinen Code von Anfang an neu zu schreiben. Hoffe, dieses Problem wird behoben – icemelt

Antwort

1

Es zu schaffen versuchen, scheint Sie erstellen können Benutzer, die die Konsole verwenden, weil Ihre Entwicklungsdatenbank die Tabelle "sexs" mit Informationen gefüllt hat, die Testdatenbank jedoch nicht. Um herauszufinden, ob dies der Fall ist, öffnen Sie Ihre Konsole in der Testumgebung und versuchen Sie, einen Benutzer zu erstellen.

+0

Zumindest in den Projekten, in denen ich gearbeitet habe, gab es eine andere Datenbank zum Ausführen der Tests. Um eine Konsole in der Testumgebung zu öffnen, benutze 'RAILS_ENV = test rails c' anstelle von' rails c' – Bustikiller

+0

yeah du hattest recht Ich kann es nicht in einer Testumgebung erstellen, aber was mich verwirrt ist, warum ich es in einem anderen erstellen kann Modell mit gleichen Attributen sex_id, das andere Modell ist Modell btw – icemelt

+0

"Schienen c test" würde auch die Testkonsole öffnen –