Sie übergeben ein Array mit einem Hash an die create-Methode. Aus diesem Grund erkennt Rails es als Array und nicht als Benutzerobjekt.
Betrachten Sie dieses Beispiel:
@user = User.create email: '[email protected]'
@user.email # '[email protected]'
@user.class # User(id: integer, ...)
Und:
@user = User.create([{ email: '[email protected]' }])
@user.email # NoMethodError: undefined method `title' for #<Array:0x007f8701b05b28>
@user.class # Array
Falls Sie ein Array von Hashes iterieren, bestimmte Benutzer erstellen Sie jede von ihnen zu wechseln brauchen würde und Dann erstelle den Benutzer, wie zum Beispiel:
[
{ name: 'Robot', email: '[email protected]', password: '123456', age: 10 }
{ name: 'Other Robot', email: '[email protected]', password: 'other password', ... },
].each { |user| User.create user }
Aber ich denke, das ist jetzt nicht der Fall. Sie können die Benutzerattribute einfach durch ein Komma trennen (ein Hash wäre überflüssig und ein Array würde Ihnen das Ergebnis liefern).
Versuchen Sie stattdessen:
before(:each) do
@user = User.create name: 'Robot', email: '[email protected]', password: '123456', age: 10
end
Hinweis before(:each)
kann before do ... end
verkürzen werden, und dass die Instanzvariablen anstatt verwenden, können Sie let
verwenden:
let(:user) { User.create name: 'Robot', email: '[email protected]', password: '123456', age: 10 }
before { user } # before each test, creates a user named "Robot"
Was ist der Wert von '@ user' ist? –
@LucasAndrade, wo und wie definierst du die Benutzerinstanz für Rspec? Verwenden Sie auch Factory-Girl an der Seite Rspec? Der Fehler zeigt an, dass die Abfrage für die Instanz eines Benutzers Ihnen keine einzelne Instanz (dh: find) zurückgibt, sondern Ihnen ein Array (dh: wo) gibt. Bitte zeigen Sie den Code, wenn Sie eine Chance haben. Bitte zeigen Sie, wie Sie einen Benutzer im Vorher-Block erstellen und, wenn möglich, auch die gesamte Testdatei. – kparekh01
@ kparekh01 Ich habe meine vor jedem hinzugefügt. Ich bekomme es jetzt, ich erstelle ein Array von Benutzern, also muss ich @user [0] .email @user [0] .password –