博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AWDwR4] No JQuery call matches [:html, "#cart"]
阅读量:6984 次
发布时间:2019-06-27

本文共 2119 字,大约阅读时间需要 7 分钟。

  实践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呢,于是就去看了好长时间的。

  我在app/controllers/line_items_controller.rb中各种加日志来打印出cart和line_items变量的值,发现都是对的。后来偶然机会发现可以打印出服务器的response。我在test "should create line_item via ajax"这个测试用例中使用这句:

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

   发现服务器返回的response没啥错误,返回的jquery语句是对的。后来上 瞅了一眼,发现测试的断言语句有变化:

     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的中文,我看了一遍,感觉不是很难,想这个月抽空翻译一下,为开源做点微薄的贡献吧。

转载地址:http://esvpl.baihongyu.com/

你可能感兴趣的文章
七年蜕变 感恩献礼
查看>>
前端vue框架的跨域处理方法
查看>>
共享经济、短视频、新零售、AI:寻觅2019年新经济未来走向
查看>>
Typescript尝试
查看>>
金融行业容器平台落地路径:敏捷响应业务更迭
查看>>
CodeMirror 5.46.0 发布,多功能在线代码编辑器
查看>>
zabbix配置邮箱报警
查看>>
使用ulimit设置文件最大打开数
查看>>
XmlHttpRequest 对象详解
查看>>
浅析Banner设计
查看>>
SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话
查看>>
传说中的裸奔节--认识及体验CSS
查看>>
二十年后的回眸(2)——顺风顺水的前三年
查看>>
烂泥:为KVM虚拟机添加网卡
查看>>
数据驱动安全架构升级---“花瓶”模型迎来V5.0(二)
查看>>
Sql Server 常用日期格式
查看>>
让“云”无处不在-Citrix Xenserver之一 环境搭建
查看>>
CentOS 5.5下LVM的分区管理
查看>>
Vsftp与PAM虚拟用户
查看>>
GoogleAppEngine是什么?
查看>>