Donc im imitant SQLite et essayant d'utiliser des fixtures pour charger dans les données correctes à afficher et tester via le navigateur avec capybara.SQLite3: Exception occupée avec Capybara/Poltergeist
Ma suite de tests utilise un Minitest avec Capybara et Poltergeist pour le pilote. la partie pertinente de mon dossier test_helper.rb
ressemble à ceci:
require "minitest/reporters"
reporters = []
reporters << Minitest::Reporters::SpecReporter.new
Minitest::Reporters.use! reporters, ENV, Minitest.backtrace_filter
require "minitest/rails/capybara"
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :js_errors => false)
end
Capybara.default_driver = :poltergeist
Capybara.current_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Toutefois, j'ai un test simple qui cogne un login niveau d'accès utilisateur pour l'application Web présente est en cours d'exécution sur, puis visite simplement la route.
Cependant, il échoue à ce qui semble être la méthode "User Access Stubbing" qui im. Qui ressemble à Core::User.any_instance.stubs(etc...)
qui vient de renvoyer un modèle d'utilisateur.
Quoi qu'il en soit l'erreur exacte que je reçois est:
ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked: commit transaction
Depuis im en utilisant des appareils serait-ce peut-être un problème de nettoyage de DB (Im ne pas l'utiliser en ce moment comme im utilisant uniquement les appareils pré-créés actuellement) Je Je n'ai jamais utilisé de nettoyant DB avec minitest car je suis seulement familier avec l'utilisation de rspec et factory girl.
Je souhaite que je puisse poster le code, mais puisque c'est le code de travail ... Je ne peux pas vraiment. La chose est bien que le test est littéralement en train d'ouvrir une page et de charger un utilisateur, ce qu'un autre test réussit. Cependant l'autre test vient d'utiliser minitest et l'User-Agent, 'Ruby' page.driver avec capybara. Alors que j'utilise poltergeist avec capybara. – msmith1114
@ msmith1114 Je ne comprends pas ce que vous entendez par "page.driver avec capybara", si vous voulez dire qu'il utilise le pilote racktest, c'est une énorme différence car tout tourne dans un seul thread synchrone - d'où une seule connexion DB. Lors de l'utilisation de poltergeist il y a au moins 2 threads (tests, app) et potentiellement plus, peut avoir plusieurs demandes lorsque la page se charge et plusieurs connexions DB. Si votre application n'utilise pas réellement sqlite dans l'échange de production pour tester avec ce que vous utilisez en production, vous aurez beaucoup plus de facilité. –
Problème est notre production DB est une version très ancienne de SQL-Server avec laquelle DB Cleaner ne fonctionnera pas, donc revenir à une table rase à chaque fois est fondamentalement impossible. Y at-il un moyen de contourner ce problème de sqlite? ou peut-être que je dois juste rester avec des tests non basés sur le navigateur pour l'instant. et le pilote qu'il dit qu'il utilise (quelqu'un d'autre a écrit ce rappel) est défini comme: 'page.driver.header ('User-Agent', 'Ruby')' ce qui suppose qu'il utilise le pilote de rack – msmith1114