Rails のコーヒー スクリプトには、次のクリック ハンドラがあります。
addProductToCartHandler = ()->
$('#add_to_cart').click((event)->
$.ajax({
type: 'POST',
url: '/line_items.json'
data: {product_id:product_id}
success: (data)->
$('.carts_number_of_items').html(data.number_of_items)
$('#carts_explanation').effect("pulsate",{times:2}, 200)
error: ()->
});
event.preventDefault()
return false
)
このスクリプトは、$.ajax を介して次のアクションを呼び出します。
def create
[...]
format.json{
@cart.save ?
( render json: {number_of_items:@cart.line_items.sum('quantity') } ) :
( render json: { error: t("line_items.error") } )
}
これは、カート内のアイテムの数を計算し、json-result を返します。これはブラウザ内では正常に機能しますが、キュウリ テストでは機能しません。
@javascript
Scenario: Add a product to a cart via ajax control
And I follow "Cucumbers"
When I follow "Add To Cart"
And I wait for the ajax request to finish
Then I should see "1 item in your cart"
このレポートで失敗します:
次に、「カートに 1 個のアイテム」と表示されます #features/step_definitions/web_steps.rb:24 [...] に「カートに 1 個のアイテム」というコンテンツがあると予想されます。カートには
0 個のアイテムがあります\n カートを表示 [ ...]
(RSpec::Expectations::ExpectationNotMetError)
「そして、ajaxリクエストが完了するのを待ちます」というステップは次のとおりです。
When(/^I wait for the ajax request to finish$/) do
start_time = Time.now
page.evaluate_script( 'jQuery.isReady&&jQuery.active==0' ).
class.should_not eql(String)
until page.evaluate_script('jQuery.isReady&&jQuery.active==0') or
(start_time + 5.seconds) < Time.now do
sleep 1
end
end
助言がありますか?