2013-07-02 3 views
0

Je suis à essayer d'installer des tests dans mon application, et j'ai rencontré un problème avec RSpec, FactoryGirl, et Mongoid. Je l'usine suivante:FactoryGirl + Mongoid + RSpec ne construit pas correctement les objets.

FactoryGirl.define do 
    factory :user do |u| 
    u.name    { Faker::Name.name } 
    u.email   { Faker::Internet.email } 
    u.crypted_password { Faker::Lorem.characters(10) } 
    u.password_salt { Faker::Lorem.characters(10) } 
    u.role    :user 
    end 
end 

J'essaie d'utiliser cette usine dans mes tests:

require 'spec_helper' 
describe User do 
    it "has a valid factory" do 
    create(:user).should be_valid 
    end 
end 

Mais je reçois cette erreur:

1) User has a valid factory 
    Failure/Error: FactoryGirl.create(:user).should be_valid 
    NoMethodError: 
     undefined method `user' for #<User:0x007ff24a119b28> 
    # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>' 

Je ne sais pas ce qui est provoquant cette erreur. De plus, existe-t-il un moyen de voir une pile complète en utilisant rspec?

Répondre

2

Cette ligne a un problème

u.role :user 

Je suppose que vous voulez définir un rôle par défaut comme « utilisateur »? Merci de ne pas utiliser le symbole ou la méthode, chaîne de l'utilisation à la place

u.role 'user' 
+0

@Max, je ne sais pas comment vous avez défini le rôle, mais vous pouvez le vérifier dans la console à l'aide '@user.role = something'. Tout ce qui fonctionne dans la console fonctionnera également en usine. –

+0

J'ai trouvé le problème. C'était une simple faute de frappe. Je validais le champ 'user' au lieu du champ' role'. Savez-vous comment obtenir des stacktraces complets de rspec? J'aurais probablement remarqué plus tôt si j'avais été capable de regarder la trace de la pile. – Max

+1

@Max, ajoutez simplement le paramètre '-b' dans votre commande rspec, ce qui signifie backtrace. –

Questions connexes