私は次のテストを作成しようとしています: モデルを編集して、ビューが更新されているかどうか、モデルがデータベースで変更されているかどうかを確認します。テスト途中でティアダウンが呼び出されました
コードがあります:あなたは私が基準を再ロードテストの最後に見ることができるように
teardown do
DatabaseCleaner.clean
ActiveRecord::Base.connection.close
Capybara.reset_sessions!
end
:
test 'a' do
user = User.joins(:organization_users).find_by organization_users: { role: OrganizationUser.roles.values_at(:ORGANIZER, :ADMINISTRATOR) }
sign_in_user user
criterion = create(:criterion, scoring_id: @scoring.id, name: "Test criterion name",
description: "Test description")
step = create(:step, criterion_id: criterion.id)
visit "scorings/" + (@scoring.id).to_s + "/criteria"
find("#criteria > div > div > a > i").click()
fill_in 'name', with: 'New name'
fill_in 'description', with: 'New description'
find('#criterion-modal > div:nth-child(2) > form > div:nth-child(4) > input').click()
criterion = criterion.reload
assert criterion.name == 'New name'
end
` ドライバ:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new app , { phantomjs: Phantomjs.path }
end
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = Capybara.javascript_driver
ティアダウンは、しかし、私がそうすると、ティアダウン機能が呼び出されます。その後、データベースが消去され、「cant find criterion id:1」というエラーが表示されます。私はminitest、工場の女の子とCapybaraを使用しています。だから私が理解したいのは、テストの終わりではなく、なぜそれを修正できるのかという理由でティアダウンが呼ばれた理由です。
ありがとうございます。
ありがとうまたはあなたのアドバイス、私は自分の投稿を編集し、あなたが言っていなかったことを追加しました。私は何かを理解していない、ティアダウンは私のテストの終わりが終わる前に呼び出されています、私はいくつかのデバッグメッセージでそれを確認した。私は今私のページで何かをチェックしています。更新リクエストは、送信後、実際にビューが更新されたかどうかを確認するAjaxの1つです。しかし、私がリロードすると、同じエラーがポップし続けます。ここで本当にしたいのは、ビューが更新されたかどうか、および基準オブジェクトがデータベースで更新されたかどうかだけです。 – TyLO
@TyLO注文を検証していると思われるデバッグメッセージはどこに記入しましたか?テストコードが完了する前にティアダウンを実行することはできません(パラレルテストを実行していて、その設定に問題がない限り)。あなたのティアダウンでは、 'DatabaseCleaner.clean'を呼び出す前に' Capybara.reset_sessions! 'を呼び出す必要があり、接続を閉じる必要はありません。それでも問題が解決しない場合は、ページに何かをチェックしてテストに追加するコマンドを追加して、デバッグメッセージの場所と実際の出力を追加してください。 –