我仍在深入Ember的验收测试。我似乎要面对的一个问题是在事件发生后DOM没有得到更新。例如,我的页面有一个侧面菜单。简单的切换改变属性,在它的组件,然后在菜单本身上切换一个 “隐藏” 类:Ember验收测试没有看到更新DOM
组件
import Ember from 'ember';
export default Ember.Component.extend({
menuHidden: true,
actions: {
toggleMenu(){
this.set('menuHidden', !this.get('menuHidden'));
},
}
});
模板
<a id="menu-toggle" class="{{unless menuHidden 'open'}}" {{ action 'toggleMenu' }}>
<span></span><span></span><span></span>
</a>
<div id="menu" class="{{if menuHidden 'hide'}}">
{{#link-to 'dashboard' invokeAction='closeMenu'}}Dashboard{{/link-to}}
{{#each menu as |child|}}
{{menu-child child=child createCase=(action 'createCase') menuHidden=menuHidden}}
{{/each}}
<a href="javascript:void(0)" {{ action 'logout' }}>Logout</a>
</div>
验收测试
import { test } from 'ember-qunit';
import moduleForAcceptance from '../helpers/module-for-acceptance';
moduleForAcceptance('Acceptance | side menu');
test('side menu opens and closes', assert=>{
logIn('[email protected]', 'password');
andThen(()=>{
assert.equal(find('#menu').attr('class'), 'hide', 'Hidden by default');
click('#menu-toggle');
andThen(()=>{
assert.equal(find('#menu').attr('class'), '', 'Now visible');
});
});
});
现在,这在浏览器中运行良好。该测试使用我的自定义帮助程序正常登录(该菜单仅在登录时可见),并且如果我将console.log
放入toggleMenu()
,它将被测试触发。但它失败了最后的assert
。我已经做了菜单的包装的HTML中的console.log最后assert
之前,它仍然能看到有class=hide
的#menu
元素是否有什么明显的,我做错了什么?在验收测试中,我找不到多个具有多个andThen
调用的示例,因此我尝试将它嵌套 - 如上所述 - 并将第二个andThen
与第一个内联对齐。没有不同。