2016-12-21 6 views
-1

Alors, comment nous résolvons l'erreur dans la fonction initialize, Quelle chose doit être fait pour éliminer cette erreurArgumentError: nombre incorrect d'arguments (1 pour 0)

Here is the Factories/user.rb

FactoryGirl.define do 
    factory :user do |u| 
    u.first_name Faker::Name.first_name 
    u.last_name Faker::Name.last_name 
    u.email Faker::Internet.email 
    u.username Faker::Name.name 
    u.title Faker::Name.title 
    u.password "hellohello" 
    u.password_confirmation "hellohello" 
end 
end 

Here is the mode spec model/user_spec.rb

require 'rails_helper' 

RSpec.describe User, :type => :model do 

    user = '' 
    describe "create" do 
    user = FactoryGirl.create(:user) 
    end 
    #describe "validations" 
    describe "Count all the user" do 
    it "should have one item created before being created" do 
     #binding.pry 
     expect(User.all.count).to eq(1) 
    end 
end 
end 

Lors du test du modèle modèle user_spec.rb, l'erreur est générée: enter image description here

+0

Veuillez ajouter 'u.password_confirmation" hellohello "' dans 'Factories/user.rb'. –

+0

Oui j'ai ajouté u.password_confirmation "hellohello" mais a toujours le même problème. –

+5

Votre code doit figurer dans la question en tant que * texte *, et non en tant que captures d'écran. – meagar

Répondre

0

Modifiez le:

u.first_name Faker::Name.first_name 
u.last_name Faker::Name.last_name 
u.email Faker::Internet.email 
u.username Faker::Name.name 
u.title Faker::Name.title 

à ceci:

u.first_name {Faker::Name.first_name} 
u.last_name {Faker::Name.last_name} 
u.email {Faker::Internet.email} 
u.username {Faker::Name.name} 
u.title {Faker::Name.title} 

Cela entraînera Ruby de réévaluer les appels à Faker chaque fois, générant différentes valeurs à chaque fois.

Notez qu'il existe toujours la possibilité de collisions, car Faker :: email peut générer le même e-mail à chaque fois. Je suggère d'utiliser une séquence à la place pour les champs avec des contraintes uniques. Quelque chose comme ceci:

sequence(:email) { |n| "person#{n}@example.com" } 
    sequence(:username, 1000) { |n| "user#{n}" } 
+1

J'utilise la séquence à la place de Faker j'ai eu le même problème Panne/erreur: initialiser def @example = nil fin ** ArgumentError: mauvais nombre d'arguments (1 pour 0) ** –