Ajax[AWDwR4] No JQuery call matches [:html, “#cart”]

  实践11.5 Testing Ajax
Changes,按照书上的描摹了test_should_create_line_item_via_ajax的测试,rake
test:functionals时有错:

 1) Failure:
test_should_create_line_item_via_ajax(LineItemsControllerTest) [/home/csd/railsProjects/depot/test/functional/line_items_controller_test.rb:42]:
Expected at least 1 element matching "tr#current_item", found 0.

  我首先想到可能是line_item是空或是cart为空,导致不见面render cart
或者line_item。可是我非晓得怎么当test里拿服务器的应打印出来。我还无见面调试Rails呢,于是便夺押了好长时间的Rails
debug。
  我在app/controllers/line_items_controller.rb中各种加日志来打印出cart和line_items变量的价,发现且是指向之。后来有时机会察觉可打印出服务器的response。我在test
“should create line_item via ajax”这个测试用例中运用就词:

puts "ajax reponse: #{@response.body}"

   发现服务器返回的response没啥错误,返回的jquery语词是对的。后来上http://intertwingly.net/projects/AWDwR4/checkdepot-32/section-11.6.html
瞅了一样眼,发现测试的断言语句子有生成:
     assert_select_jquery :html, ‘#cart’ do
      assert_select ‘tr#current_item td’, /Programming Ruby 1.9/
    end
    
     查了瞬间 assert_select_jquery
【http://rubydoc.info/gems/jquery-rails/2.1.3/ActionDispatch/Assertions/SelectorAssertions\#assert\_select\_jquery-instance\_method】
  
 assert_select_jquery【https://github.com/rails/jquery-rails/blob/master/lib/jquery/assert\_select.rb】
是jquery_rails中提供的,从一个JQuery响应中选取内容。
  
 解释可展现这里。assert_select_jquery(*args,
&block) ,后来了解了method即函数的意思,而未是put, delete, get等HTTP
method。咱们这边是选出
id为cart的素而其达到的jquery调用啊html的情节,然后去检查及时段内容里是否含有
‘tr#current_item td’,并且其值是 Programming Ruby 1.9
    可是rake test:functionals 后要么时有发生错:  

 1) Failure:
test_should_create_line_item_via_ajax(LineItemsControllerTest) [/home/csd/railsProjects/depot/test/functional/line_items_controller_test.rb:42]:
No JQuery call matches [:html, "#cart"]

  我当网上搜了好长时间,都无找到相关的无限多信息,我便想一定是我之所以擦了,再次确定了转,作者的网站及呢是如此写的,assert_select_jquery
的调用应该是,实在没招了就是看了羁押它的源码,隐约感到是匹配的产生题目,所以测试时提醒找不至。花了一个钟头温习正则表达式,并分析源码中的相当过程,发现原先是assert_select_jquery
匹配
method时,要求method后面参数中,HTML必须是双料引号包裹的,不可知是单引号。于是找到app/views/line_items/create.js.erb修改

$('#cart').html('<%= escape_javascript(render(@cart)) %>');

$('#cart').html("<%= escape_javascript(render(@cart)) %>");

  再次飞测试,果然通过了。

  经测试发现Ajax

 assert_select 'tr#current_item td', /Programming Ruby 1.9/

assert_select 'tr#current_item', /Programming Ruby 1.9/ 

都是好的。不亮啊底也,如果有理解的丁伸手点一下。
  发现没Rails
debug的汉语,我看了一如既往任何,感觉不是十分麻烦,想以此月抽空翻译一下,为开端源做点一线之奉献吧。

回本系列之目

相关文章