jquery – 测试一个ember app – ember.js find()帮助程序可接受的选择器

试图试驾我的第一个ember.js应用程序.使用ember app kit.

对qunit如何与选择器一起工作感到困惑(我假设jquery选择器可以工作,而且它们确实在 – 大部分……).

我的车把有这个代码

{{#link-to 'locations.new' classNames='add-btn'}}
  Add new location
{{/link-to}}

我打算测试是否存在具有适当href的链接,并单击该链接并在单击后验证当前URL和路由.

所以,我的测试如下:

// There is an element that links to locations/new
var link = find('a[href="#/locations/new"]');
ok(link,'There is a link to add new location on the page');

click(link);
andThen(function() {
  equal(currentRouteName(),'locations.new','Clicked "add" button - now locations.new route is active');
  equal(currentURL(),'/locations/new','Clicked "add" button - and current url is /locations/new');
});

注意:我使用this PR on EAK的currentRouteName和currentURL助手,它们确实按预期工作.

我的测试在点击(链接)部分失败,错误:未找到元素[对象对象] ..

如果我尝试直接将选择器传递给点击 – 就像这样 – 点击(“a [href =’#/ locations / new’]”) – 我得到一个错误元素a [href =’#/ locations / new’]没有如果我尝试使用反斜杠或双反斜杠转义特殊字符#,则会发现相同的结果.

暂时,我通过逐类抓取div来缓解这个问题 – 就像这样:

var link-by-class = find('.add-btn');
click(link-by-class);
andThen( as above )

测试通过了.

问题:

>为什么我不能在href找到的同一个变量上调用“click()”?
>我是否对实施有合理的漠视? (好吧,通过班级找到一个元素的解决方法不符合该法案?)

提前致谢!

UPDATE

根据kingpin2k评论,由于我选择了错误的断言方法,我的测试正在通过 – 如果foo是一个空数组,那么ok(foo,’bar’)将会通过(如果没有结果,它会返回.Ember API docs引导我使用findWithAssert,它无法找到与此类href的链接.

令人迷惑的是,在JS控制台的每个jQuery docs中使用[attribute =’value’] jquery选择器工作;并且在ember-testing中执行find以及findWithAssert似乎只是将选择器传递给jQuery …

为什么会失败?我不知道.人们会认为GLaDOS解释了speedy thing goes in,speedy thing comes out – 只是将选择器传递给jQuery会让它回来,因为jQuery会返回它 – 但显然不是.

我会坚持使用类选择器,虽然它确实有点决定实现.

解决方法

拒绝放弃使测试实现无关,我决定使用基本选择器,并发现我的失败的无证件的罪魁祸首.

首先,我想获得所有链接 – 并通过href属性过滤它们:

var links = findWithAssert('a');
  var my-link = links.filter('[href="#/location/new"]');

这给了我一个正确的链接长度,但我的链接仍然是空的.所以我提醒所有hrefs,以确保我没有遗漏任何东西:

for(var i=0; i<links.length; i++){
    alert(links[i].getAttribute('href'));
  }

令我惊讶的是,我看到hrefs在没有领先#的情况下发出警报.

回答:在ember.js find()helper中使用带有href属性的复杂css选择器时,从URL中删除哈希.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...