Donc, mon équipe est en train de sortir notre application de rails (un système d'enregistrement et d'enregistrement électronique) en utilisant Cucumber, Rspec et toutes les gemmes nécessaires pour utiliser ces frameworks de test. Je suis en train de mettre en place un serveur CI Jenkins et je voulais normaliser nos bases de données à travers nos environnements de test, de développement et de mise en scène (nous avons fini par choisir MySQL). Lors du passage de l'environnement de test de SQlite à MySQL, nous avons découvert quelques bogues de test liés à la mise en cache que nous avons résolus en utilisant des identifiants relatifs au lieu de ceux codés en dur. exemple:Un nettoyeur de base de données ne nettoie pas un seul scénario de concombre
describe "#instance_method" do
before(:each) do
@survey = FactoryGirl.create(:survey)
@question_1 = FactoryGirl.create(:question)
@question_2 = FactoryGirl.create(:question)
....
end
context "question has no requirements" do
it "should match" do
# below breaks under MySQL (and postgres), but not SQlite
expect { @survey.present_question?(2) }.to be_true
# always works
expect { @survey.present_question?(@question_2.id) }.to be_true
end
end
end
Après avoir résolu celui-ci ne spec, j'ai adressé quelques questions sans rapport avec ajax qui ont affligent toujours notre suite de tests. Pensant que j'ai finalement mastédé l'art de tester, j'ai couru avec confiance rake
. Je suis rencontré ce spectacle hostile:
Maintenant, bien sûr cucumber features/presenting_default_questions.feature
pluies vert lorsqu'il est lancé dans l'isolement.
défaut Scénario:
@javascript
Feature: Dynamic Presentation of Questions
In order to only answer questions that are relevant considering previously answered questions
As a patient
I want to not be presented questions that illogical given my previously answered question on the survey
Scenario: Answering a question that does not depend on any other questions
Given I have the following questions:
| prompt | datatype | options | parent_id | requirement |
| Do you like cars? | bool | | | |
| Do you like fruit? | bool | | | |
When I visit the patient sign in page
And I fill out the form with the name "Jim Dog", date of birth "1978-03-30", and gender "male"
And I accept the waiver
Then I should see the question "Do you like cars"
When I respond to the boolean question with "Yes"
Then I should see the question "Do you like fruit?"
When I respond to the boolean question with "No"
Given I wait for the ajax request to finish
Then I should be on the results page
étape pertinente:
Then(/^I should be on the results page$/) do
# fails under ``rake`` passes when run in isolation
current_path.should == results_survey_path(1)
end
Then(/^I should be on the results page$/) do
# passes in isolation and under ``rake``
current_path.should == results_survey_path(Survey.last.id)
end
En plus de l'utilisation de Capybara.javascript_driver = :webkit
, la configuration du filtre concombre/base de données est non modifiée à partir de rails g cucumber:install
.
Il semble que les tests rspec et concombre défaillants souffrent du même type de problème d'indexation. Alors que la solution proposée ci-dessus fonctionne, c'est super janky et pose la question de savoir pourquoi un simple index absolu ne fonctionne pas (après tout, la base de données est nettoyée entre chaque scénario et fonctionnalité). Y at-il quelque chose avec mes tests? Avec database_cleaner?
S'il vous plaît laissez-moi savoir si plus de code serait utile!
versions de pierres précieuses relavent:
- ActiveModel (3.2.14)
- concombre (1.3.6)
- rails de concombre (1.3.1)
- database_cleaner (1.0.1)
- capybara (2.1.0)
- capybara-webkit (1.0.0)
- mysql2 (0.3.13)
- rspec (2.13.0)
Nous venons de rencontrer un problème similaire immédiatement après la mise à jour de capybara de la version 1.1.2 vers la version 2.1.0. Avant, tous les tests verts. Après, la base de données de test devient de plus en plus polluée pendant que nous réexécutons les scénarios – xxjjnn
Des mises à jour à ce sujet? Je vois un problème similaire (le scénario du concombre passe isolément, échoue avec toute la suite) et j'essaye de lui mettre les vis. – pjmorse
@pjmorse @ClothSword Avez-vous essayé de mettre à jour la version de 'database_cleaner' vers' 1.3.0'? – etagwerker