Comment créer un modèle avec une certaine id à l'aide de rspec et de l'usine de fille
J'utilise:
gem 'rails', '3.2.11'
gem 'rspec-rails', '2.13.2'
gem 'webrat', '0.7.3'
gem 'factory_girl_rails', '4.1.0'
gem 'spork', '~> 0.9.0.rc'
Je veux tester mon HP où j'ai toujours un lien à un certain utilisateur, de sorte que le contrôleur pages pour HP contient:
@user = User.find(7)
Et la vue HP contient:
link_to 'See user', @user
Le problème est que tous les tests échouent le test de la base de données n'a pas d'utilisateur avec l'id 7. J'ai essayé:
FactoryGirl.define do
factory :user do
name "Testuser"
id "7"
end
end
... mais cela ne fonctionne pas. Il y a toujours l'erreur:
La spec est-ce:
describe "GET 'home'" do
before(:each) do
FactoryGirl.create(:user)
end
it "should be successful" do
get 'home'
response.should be_success
end
end
Panne/Erreur: 'la maison'
ActiveRecord::RecordNotFound:
Impossible de trouver de l'Utilisateur avec l'id=7
Le HP fonctionne très bien dans la réalité, il suffit que le test échoue. Comment puis-je assurer ce test n'est pas voué à l'échec?
Je ne sais pas si ça allait fonctionner, mais essayez id = 7
Pouvez-vous ajouter le code de votre faute spec, s'il vous plaît?
Montrer le code de votre spec si vous voulez aide utile. Jusqu'à présent tout le monde est dans le doute.
Désolé... j'ai ajouté la spécification de l'échec du test.
Pouvez-vous ajouter le code de votre faute spec, s'il vous plaît?
Montrer le code de votre spec si vous voulez aide utile. Jusqu'à présent tout le monde est dans le doute.
Désolé... j'ai ajouté la spécification de l'échec du test.
OriginalL'auteur user929062 | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Qu'en se moquant /stubbing (beaucoup plus rapide spec lorsqu'il n'est pas de sauver les objets de base de données):
Si vous avez encore des question à l'utilisateur d'être instancié, vous pouvez toujours utiliser la technique ci-dessus, mais en remplaçant
FactoryGirl.build(:user)
parFactoryGirl.create(:user)
OriginalL'auteur Pierre-Louis Gottfrois
Basé sur la En Utilisant Des Usines section de la documentation, je mettrais le
id
dans la spécification elle-même avec quelque chose comme:Pour ceux qui trouvent cette question par le biais de Google. Cette solution fonctionne maintenant (août 2015)
OriginalL'auteur James Chevalier
Pas une réponse mais une suspicition... vous ne devriez probablement pas écrire la spécification de la façon dont vous le faites.
dans votre spec faire quelque chose comme:
Faire vos tests dépendant des ids est une recette pour un désastre.
OriginalL'auteur timpone
Vous pouvez définir l'ID de l'utilisateur en faisant quelque chose comme
Cependant, c'est un peu bizarre. Vous pouvez même exécuter dans un cas où il existe de l'utilisateur 7.
Ce que vous pourriez faire, c'est l'utilisation de Rspec talons pour obtenir le bon utilisateur. Par exemple, vous pourriez faire quelque chose comme
OriginalL'auteur Olives
Dans votre cas, je suis sûr que vous êtes juste vérifier que l'id d'utilisateur est utilisé au lieu d'un code spécifique.
Quand j'écris des tests je viens d'obtenir l'id retourné à partir de la base de données qui est bien plus fiable et plus proche de ce que vous faites dans la réalité.
Je voudrais écrire le contrôleur spec quelque chose comme ça.
Cela devrait se charger de l'amende. Si vous souhaitez vérifier que le lien est correct, vous devez le faire dans un
feature
spec en utilisant quelque chose comme capybara.OriginalL'auteur Tyrone Wilson