对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会返回它 – 但显然不是.
我会坚持使用类选择器,虽然它确实有点决定实现.