app*_*Dev 7 testing jquery qunit ember.js ember-app-kit
试图试驾我的第一个ember.js应用程序.使用ember app kit.
qunit如何与选择器一起使用感到困惑(我假设jquery选择器可以工作,而且它们确实在 - 大部分......).
我的车把有这个代码:
{{#link-to 'locations.new' classNames='add-btn'}}
Add new location
{{/link-to}}
Run Code Online (Sandbox Code Playgroud)
我打算测试是否存在适当的链接,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');
});
Run Code Online (Sandbox Code Playgroud)
注意:我使用currentRouteName和currentURL助手从这个PR的EAK,和他们像预期的那样.
我的测试失败click(link)了Error: Element [object Object] not found..
如果我尝试直接将选择器传递给click - 就像这样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 )
Run Code Online (Sandbox Code Playgroud)
测试通过了.
问题:
提前致谢!
UPDATE
根据kingpin2k的评论,我的测试是由于我选择了错误的断言方法ok(foo, 'bar')而传递 - 如果foo是一个空数组将find返回(如果没有结果则返回.Ember API文档引导我使用findWithAssert,它无法找到与此相关联href.
令人迷惑的是,在JS控制台的[attribute='value']每个jQuery文档中使用jquery选择器工作; 并且在ember-testing 中find和findWithAssert的实现似乎只是将选择器传递给jQuery ...
为什么会失败?我不知道.人们会认为GLaDOS解释了快速的事情,快速的事情出来了 - 只是将选择器传递给jQuery会让它回来,因为jQuery会返回它 - 但显然不是.
我会坚持使用类选择器,虽然它确实有点决定实现.
由于拒绝放弃使测试实现不可知,我决定使用基本选择器,并发现了失败的未记录的罪魁祸首。
首先,我想获取所有链接 - 并按href属性过滤它们:
var links = findWithAssert('a');
var my-link = links.filter('[href="#/location/new"]');
Run Code Online (Sandbox Code Playgroud)
这给了我正确的长度links,但my-link仍然是空的。所以我提醒了所有的hrefs,以确保我没有遗漏任何内容:
for(var i=0; i<links.length; i++){
alert(links[i].getAttribute('href'));
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我看到提示的 href 没有前导#.
答案:href当在 ember.js帮助器中
使用具有属性的复杂 css 选择器时find(),请从 url 中删除哈希值。