次のフォームをテストしようとしています。このフォームでは、チェックボックスをオンにしてプロファイルを非表示にすることができます。CapybaraチェックボックスがJSをトリガーしていませんか?
このチェックボックスをオンまたはオフ(変更)にすると、JSを使用してフォームが送信されます。
コントローラ内のコントローラのアクションとメソッドは、:hidden booleanを切り替えます。
# accountsController
def toggle_hidden
@account = current_user.account
@account.toggle_hidden!
end
# account.rb
def toggle_hidden!
toggle!(:hidden)
end
私はRspecとカピバラを使用しています。私のテストは以下の通りです
require 'rails_helper'
feature 'Hide and show profile' do
let(:account) {create :account}
scenario 'successfully', js: true do
login_as(account.user)
visit dashboard_path
expect(account.hidden).to eq(false)
expect(page).to have_field('hide')
check('hide')
expect(page).to have_field('hide', checked: true)
expect(account.hidden).to eq(true)
end
end
テストエラーです。
Failures:
1) Hide and show profile successfully
Failure/Error: expect(account.hidden).to eq(true)
expected: true
got: false
(compared using ==)
すべてのヘルプは非常にこれが動作することはできません理由として高く評価され..
EDIT
私は、チェックボックスが/未チェックチェックされているときに表示されるフラッシュ通知を追加しました。
def toggle_hidden
@account = current_user.account
@account.toggle_hidden!
respond_to do |format|
format.js { flash[:notice] = "Hidden toggled" }
end
end
と仕様を更新しましたが、テストに合格しません。
expect(page).to have_content('Hidden toggled')
こんにちはThomas、入力いただきありがとうございます。チェックボックスをオンにしたときに表示されるフラッシュ通知と、そのコンテンツにはまだ運がないという期待が追加されています。私はこれを反映するために質問を更新しました。 – RailsJohn
@RailsJohn - 新しい期待は失敗していますか?それとも、それは通過し、古いものはまだ失敗しますか?古いものがまだ失敗している場合は、呼び出しに 'reload'を追加して、古い値をチェックしていないことを確認してください。新しいメッセージが表示されない場合は、質問に表示されている正確なエラーメッセージを追加してください。ああ、JSレンダリングレスポンスのためにすぐに設定する必要があるので、 'flash [:notice]'ではなく 'flash.now [:notice]'を設定したいと思っています。 –
私は最初にあなたの最初の提案を試しました。 .reload.hidden).toに渡されなかったeq(真)。その後、まだ渡されなかったフラッシュ通知(実行中の通知と通知なし)を実装しました。チェックボックスをオンにすると、フォームが送信されていないように見えるため、フラッシュは表示されず、レコードも更新されません。 – RailsJohn