Le rechargement d'un objet ne fonctionne pas dans rspec
Je suis en train de tester une méthode de contrôleur avec le code suivant:
it "should set an approved_at date and email the campaign's client" do
@campaign = Campaign.create(valid_attributes)
post :approve, id: @campaign.id.to_s
@campaign.reload
@campaign.approved_at.should_not be(nil)
end
Cependant, lorsque j'exécute ce test, j'obtiens l'erreur suivante:
Failure/Error: @campaign.reload
ActiveRecord::RecordNotFound:
Couldn't find Campaign without an ID
Quand je lance l'analogues lignes dans la console rails, le rechargement des œuvres et la valeur est définie que j'en ai besoin pour être. Pourquoi n'est-il pas de rechargement de travail pour moi lorsque j'exécute le code dans un rspec test?
OriginalL'auteur Eric Baldwin | 2013-07-01
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème en passant à FactoryGirl:
Qui fonctionne comme prévu
OriginalL'auteur Eric Baldwin
Je voudrais exécuter un test pour s'assurer un
Campaign
enregistrement est en fait en cours de création:.reload
est la première place dans votre code que un nul@campaign
ferait une erreur (puisque vous pouvez appeler.to_s
sur un nul objet)OriginalL'auteur Runthral
Deux endroits possibles pour les erreurs.
de création de l'objet. c'est à dire
@campaign = Campaign.create(valid_attributes)
Votre objet ne peut pas être correctement créé. Je vous suggère d'utilisercreate!
au lieu decreate
dans le test de sorte que toute erreur sera levée.Contrôleur. Lorsque le contrôleur s'attendre à trouver l'objet integer id, vous lui donnez une chaîne de caractères. Peut-être aussi le problème. Je vous suggère de ne pas convertir l'id de chaîne. Si, pour l'OBTENIR, vous pouvez le faire mais pas nécessaire. Si, pour la POSTE, la conversion de chaîne de caractères qui est faux.
OriginalL'auteur Billy Chan