sleep を呼び出さずに rspec テストを実行するのに問題があります。
it 'should allow deleting of foo brand attributes', :js => true do
@foo.brand_attributes << BrandAttribute.new(key: :test, value: :test)
@foo.save!
@foo.brand_attributes.length.should eq 1
visit('/admin')
expect(page).to have_content 'Test Foo'
click_link 'Edit'
# Edit opens a modal edit form with a list of attribute fields
page.should have_selector('#edit-modal-div', visible: true)
page.should have_selector('.attribute_fields', visible: true)
page.should have_selector('.attribute_fields input[type=hidden]')
# 1st sleep:
sleep 0.3
within(:css, "#edit-modal-div") do
# should update hidden input with destroy value
click_link 'Delete'
end
# 2nd sleep
sleep 0.3
page.should have_selector('.attribute_fields', visible: false)
within(:css, "#edit-modal-div") do
click_button 'Save'
end
page.find('.alert').should have_content 'successfully updated'
@foo = Foo.find(@food.id)
@foo.brand_attributes.length.should eq 0
私の予想では、「page.should have_selector(」呼び出しは、[編集] をクリックした後、jquery アニメーションが終了するまで待機する必要がありますが、何らかの理由で、[削除] をクリックする呼び出しの前にスリープを挿入しない限り、[削除] ボタンは非表示フィールドを更新しません。 . ページ上の何かが完全に準備できていないようです。
wait_until は廃止されたので、[削除] ボタンをクリックする準備ができていることを判断する最良の方法は何ですか?
リンクをこれだけに変更してみました:
<a class="destroy_link" href="#" onclick="x = 4; return false;">Delete</a>
「削除」をクリックしても、x が 4 に設定されません。カピバラがクリックをトリガーするまでに onclick ハンドラーが初期化されていないようです。待つ必要があるものはありますか?