ember.js find()助手可接受的选择器
尝试测试我的第一个ember.js应用程序。 使用烬应用程序工具包。
困惑于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');
});
注意:我在EAK上使用此PR的currentRouteName
和currentURL
助手,并且它们按预期工作。
我的测试失败click(link)
部分, Error: Element [object Object] not found.
。
如果我尝试直接通过选择器点击 - 就像这样 - click("a[href='#/locations/new']")
- 我收到一个错误Element a[href='#/locations/new'] not found.
。 如果我尝试使用反斜杠或双反斜杠来逃避特殊字符#,结果相同。
就目前而言,我通过逐级抓住div来缓解这个问题 - 就像这样:
var link-by-class = find('.add-btn');
click(link-by-class);
andThen( as above )
测试通过。
问题:
提前致谢!
UPDATE
每kingpin2k的评论,我的测试是合格由于错误的断言方法我选择- ok(foo, 'bar')
是否会通过foo
是一个空数组(其中find
。回报,如果没有结果灰烬API文档指导我用findWithAssert,它无法找到这样的href
的链接。
令人费解的是,在JS控制台中使用每个jQuery文档的[attribute='value']
jquery选择器; 并且find和findWithAssert在ember-testing中的实现似乎只是将选择器传递给jQuery ...
它为什么会失败? 我不知道。 有人会认为GLaDOS解释了快速的事情,快速的事情出来了 - 只要将选择器传递给jQuery就会让它返回,因为jQuery会返回它 - 但显然不是。
然后,我会坚持使用类选择器,尽管它确实实现了类的实现。
拒绝放弃测试实现 - 不可知论,我决定使用基本的选择器,并发现我的失败的无证的罪魁祸首。
首先,我想获得所有链接 - 并通过href
属性过滤它们:
var links = findWithAssert('a');
var my-link = links.filter('[href="#/location/new"]');
这给了我一个正确的links
长度,但my-link
仍然是空的。 所以我提醒了所有的hrefs,以确保我没有遗漏任何东西:
for(var i=0; i<links.length; i++){
alert(links[i].getAttribute('href'));
}
而令我惊讶的是,我看到了没有领先#
海报系统。
答案:在ember.js find()
助手中使用带有href
属性的复杂css选择器时,从url中删除散列。