Éteignez transactionnel des accessoires pour un spec avec RSpec 2
Comment puis-je désactiver transactionnel des accessoires pour un seul spec (ou Steak scénario) avec RSpec 2?
J'ai essayé quelques choses trouvées sur le web, sans succès.
Cela conduit à une méthode non définie exception.
décrire "MyClass sans transactionnelle de luminaires" ne auto.use_transactional_fixtures = false ... fin
Cela n'a tout simplement rien (transactionnel luminaire est encore sur):
décrire "MyClass sans transactionnelle de luminaires" ne RSpec.configurer n' |config| config.use_transactional_fixtures = false fin ... fin
Quoi d'autre pourrais-je essayer?
- c'est vraiment filaire à vouloir que. parce que vous ne pouvez pas savoir ce que vous avez dans votre base de données.
- J'espère que ce n'est pas vrai pour votre code, trop 😉 Mais sérieusement, pour certains scénarios de test, vous devez désactiver le transactionnel des accessoires. Par exemple, comme dans mon cas, pour tester la Pensée Sphinx. Sphinx besoin de mettre à jour l'index de recherche de "l'extérieur". Et donc, il doit connaître le contenu de base de données à un moment précis.
- Juste une chose à noter, Au moins dans mon environnement ( Rails4 rspec 2 ) si pour une raison quelconque inclure la rspec/rails_helper dans l'un de vos rspec fichiers, il sera la cause de tout test dans la suite ou dans les fichiers suivants à exécuter un point de vue transactionnel encore.
Vous devez vous connecter pour publier un commentaire.
Ce utilisé pour être un bug (voir ticket #197), mais je semble être ok maintenant. Je ne sais pas si elle va travailler sur une base de test (probablement pas). Si vous voulez faire cela, vous pouvez désactiver transactionnelle luminaires à l'échelle mondiale en mettant
config.use_transactional_fixtures = false
sur lespec_helper.rb
et l'utilisation DatabaseCleaner pour le mettre.J'ai eu un problème similaire lors de l'essai de pages avec du javascript sur le navigateur (un scénario qui ne fonctionne pas avec transactionnel accessoires). Voici comment j'ai réussi à le contourner: http://github.com/lailsonbm/contact_manager_app
MyClass.connection.commit_db_transaction
mais il a quitté la connexion dans un étrange état où il pensait qu'il y avait une transaction ouverte, mais il n'a pas. De ce fait certains d'enregistrement active les commandes fonctionnent pas et ont également conduit à des avertissements. Cela semblait pour résoudre ce problème, en fait la clôture de la transaction dans la base de données et la mise à jour de la connexion de savoir qu'il n'avait plus d'une transaction ouverte: Maclasse.connexion..transaction_manager.commit_transactionJe l'habitude d'ajouter une aide comme ceci:
Qui me permet de désactiver transactionnel des accessoires pour un bloc spécifique dans les specs:
self.use_transactional_fixtures
pour encore vrai? après(:all) bloc? Je pense que ce sera définie comme faux pour les autres spécifications qui sera exécuté.J'ai fait de cette façon, avec database_cleaner, afin de tester le code qui utilise des transactions (qui sera en conflit avec transactional_fixtures ou toute autre stratégie pour faire des testes de transaction par exemple DatabaseCleaner.stratégie = :la troncature ou de transaction):
et dans mon cas de test:
J'ai mélangé les deux réponses et cela a fonctionné pour moi sur RSpec 3:
Vous pouvez ensuite l'utiliser dans la décrire, d'un contexte ou d'en bloquer
Pas sûr que cela s'applique à RSpec2, mais fonctionne très bien avec 3.
L'esprit de la
use_transactional_fixtures
(rspec rails en option) etuse_transactional_tests
(activerecord luminaires option) différence.Utilisation
use_transactional_tests
au lieu deuse_transactional_fixtures
Quand Rspec 2.3.8 est utilisé