2012-07-13 29 views
1

在Rails咖啡腳本我有這個點擊處理程序:黃瓜測試問題,Ajax和JSON,甚至使用Ajax-等待解決辦法

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 
    ) 

這個腳本通過阿賈克斯$下面的操作調用

def create 
    [...] 

    format.json{ 

     @cart.save ? 
       (render json: {number_of_items:@cart.line_items.sum('quantity') }) : 
       (render json: { error: t("line_items.error") }) 

     } 

這可以計算購物車中物品的數量,並返回json結果。 這工作的瀏覽器中運行良好,但不與黃瓜測試:

@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項在您的購物車」#特性/ step_definitions/web_steps .rb:24 預計將有內容在您的購物車中有1項內容[012] 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 

有什麼建議?

回答

0

我敢肯定你已經想通了這一點,因爲這是18個月前,思考有類似的問題::

  • 誤碼因故(在這種情況下,你可以使用「save_and_open_page」偷看檢查內容或查看page.driver.console_messages,看看是否有JS錯誤)
  • 花了超過5秒(在這種情況下,你可以改變你的5.秒到更大的東西,看看它是否工作)
  • jQuery別名不工作? (我看你用$ - ?不jQuery.isReady & & jQuery.active == 0返回在控制檯)

你還記得那是什麼?