Je suis nouveau dans les rails. Dans mon projet, j'utilise rspec + capybara + poltergeist + selenium + database_cleaner.Rails nettoyer la base de données entre les tests ne fonctionne pas
code source github link
Je postgresql 9.5.5, ubuntu 16.04 LTS.
Lors de l'exécution Test
rspec spec/controllers # everything work fine
Effectué
rspec spec/features # everything work fine too
Mais quand je lance tous les tests
rspeC# part of tests fail
Effectué premier test d'acceptation avec: sélénium -> question_id dans le navigateur 28 , mais doit être 1, car il utilise database_cleaner.
Pourquoi database_cleaner ne nettoie pas ma base de données? Ce que je fais mal? J'ai passé une journée à trouver une solution, mais je n'ai rien trouvé. Aidez-moi s'il vous plaît.
P.S. C'est un projet de formation.
Ma configuration Database_Cleaner est:
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
Warden.test_reset!
if Rails.env.test?
FileUtils.rm_rf(Dir["#{Rails.root}/public/uploads"])
end
end
Pourquoi pensez-vous que dans doit être 1? Selon la façon dont vous avez installé database_cle aner il est possible que la base de données soit vide mais ne réinitialise pas le compteur de colonne d'identification - Avez-vous interrogé la base de données pour voir combien de questions y sont enregistrées? Vos tests ne doivent contenir aucun identifiant d'enregistrement codé en dur.Si ce n'est pas le cas, ajoutez un de vos tests et votre configuration database_cleaner à votre question. –
J'ajoute les fichiers à la question. Et par défaut je pense, cette question dans db est une, et le lien vers le fichier ajouté doit avoir un lien href: '/ uploads/attachment/file/1/test_fichier.dat', où 1 est l'identifiant de la question. Mais en réalité, l'identifiant de la question est 28. Je pensais que les bases de données nettoyaient les tables propres chaque fois que le test s'exécute. –
@ThomasWalpole - Je comprends ce que vous dites. Oui, la table a juste 1 rangée. J'ai besoin de réécrire mes tests. Merci pour la solution. –