1

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

助言がありますか?

4

1 に答える 1