对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中删除哈希.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。