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

时间:2014-02-04 22:57:22

标签: jquery testing ember.js qunit ember-app-kit

尝试试用我的第一个ember.js应用。使用ember app kit。

qunit如何与选择器一起使用感到困惑(我假设jquery选择器可以工作,而且它们确实有用 - 大部分......)。

我的车把有这个代码:

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

我打算测试是否存在具有相应href的链接,并点击该链接并在点击后验证当前网址和路由。

所以,我的测试如下:

// 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中的currentRouteNamecurrentURL个助手,他们确实按预期工作。

我的测试在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 )

测试通过。

问题:

  1. 为什么我不能在href找到的同一个变量上调用“click()”?
  2. 我是否对实施有合理的漠视? (那么,通过课程找到元素的解决方法不符合该法案?)
  3. 提前致谢!

    更新

    根据kingpin2k的评论,由于我选择了错误的断言方法,我的测试正在通过 - 如果ok(foo, 'bar')是一个空数组foofind将会通过如果没有结果,则返回.Ember API文档指导我使用findWithAssert,但无法找到与此href的链接。

    令人困惑的是,在JS控制台的每个jQuery docs中使用[attribute='value'] jquery选择器工作;在ember-testing中find以及findWithAssert的实现似乎只是将选择器传递给jQuery ......

    为什么会失败?我不知道。有人会认为GLaDOS解释speedy thing goes in, speedy thing comes out - 只是将选择器传递给jQuery会将其返回给jQuery将其返回 - 但显然不是。

    我会坚持使用类选择器,尽管它确实有点决定实现。

1 个答案:

答案 0 :(得分:4)

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

首先,我想获取所有链接 - 并按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'));
  }

令我惊讶的是,我看到hrefs在没有前导#的情况下发出警告。

<强>答案: 在ember.js href帮助器中使用具有find()属性的复杂css选择器时,请从URL中删除哈希值。