そのため、私のチームは、Cucumber、Rspec、およびこれらのテスト フレームワークを使用するために必要なすべての gem を使用して、Rails アプリ (調査および軽量の電子記録システム) を追い出しています。私は Jenkins CI サーバーをセットアップする過程にあり、テスト、開発、およびステージング環境全体でデータベースを標準化したいと考えていました (最終的に MySQL を選択しました)。
テスト環境を SQlite から MySQL に切り替えたところ、キャッシング関連のテスト バグがいくつか発見されましたが、ハードコーディングされた ID ではなく相対 ID を使用することで解決しました。例:
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
この 1 つの失敗した仕様を解決した後、テスト スイートを永遠に悩ませてきた無関係な 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 とは?
もっとコードが役立つかどうか教えてください!
関連する gem バージョン:
- アクティブモデル (3.2.14)
- きゅうり(1.3.6)
- きゅうりレール(1.3.1)
- データベースクリーナー (1.0.1)
- カピバラ (2.1.0)
- カピバラウェブキット (1.0.0)
- mysql2 (0.3.13)
- rspec (2.13.0)