黄瓜测试问题与ajax和json甚至与ajax-wait-workaround

时间:2012-07-13 09:57:58

标签: ajax json cucumber

在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的::期望:: 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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我确定你已经解决了这个问题,因为它是18个月以前,对窥视有类似问题的想法::

  • 出于某种原因出错(在这种情况下,您可以使用&#39; save_and_open_page&#39;检查内容或查看page.driver.console_messages以查看是否存在JS错误)
  • 超过5秒(在这种情况下,您可以将5.秒更改为更大的内容,看看它是否有效)
  • jQuery别名不起作用? (我看到你正在使用$ - jQuery.isReady&amp;&amp; jQuery.active == 0在你的控制台中返回?)

你还记得那是什么吗?