Итак, моя команда вытесняет наше приложение rails (опрос и облегченную систему электронной записи), используя Cucumber, Rspec и все драгоценные камни, необходимые для использования этих сред тестирования. Я нахожусь в процессе настройки сервера Jenkins CI и хотел стандартизировать наши базы данных в наших средах тестирования, разработки и подготовки (в итоге мы выбрали MySQL).
При переключении среды тестирования с SQlite на MySQL мы обнаружили пару ошибок тестирования, связанных с кэшированием, которые мы устранили, используя относительные идентификаторы вместо жестко закодированных. пример:
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
После исправления этой единственной несостоявшейся спецификации я решил несколько не связанных с ней проблем с ajax, которые всегда мешали нашему набору тестов. Думая, что наконец-то овладел искусством тестирования, я уверенно запустил rake
. Меня встретил такой недружелюбный взгляд:
Теперь, конечно, cucumber features/presenting_default_questions.feature
идет зеленый дождь, когда он работает в изоляции.
Неудачный сценарий:
@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
Соответствующий шаг:
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
Помимо использования Capybara.javascript_driver = :webkit
, конфигурация огурца/очистителя базы данных не отличается от rails g cucumber:install
.
Похоже, что и неудачный тест rspec, и тест на огурец страдают от одной и той же проблемы с индексацией. Хотя предложенное выше решение работает, оно очень дерганое и вызывает вопрос, почему простой абсолютный индекс не работает (ведь база данных очищается между каждым сценарием и функцией). Что-то не так с моими тестами? С помощью database_cleaner?
Пожалуйста, дайте мне знать, если больше кода будет полезно!
Релевантные версии драгоценных камней:
- активная модель (3.2.14)
- огурец (1.3.6)
- огурцы-рельсы (1.3.1)
- база данных_очиститель (1.0.1)
- капибара (2.1.0)
- капибара-вебкит (1.0.0)
- mysql2 (0.3.13)
- рспек (2.13.0)
database_cleaner
до1.3.0
? - person etagwerker   schedule 10.12.2014