[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)) %>");

  再一次跑测试,果然通过了。

  经测试发现

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

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

都是足以的。不晓得怎么呢,即使有通晓的人请指引一下。
  发现并未Rails
debug的闽南语,我看了三遍,感觉不是很难,想以此月抽空翻译一下,为开源做点一线的贡献啊。

再次来到本体系的目录

相关文章