我编写了这个简单的演示组件来演示一个问题。组件代码如下
App.FocusOutComponent = Em.Component.extend({
attributeBindings: ['tabindex'],
tagName: 'focus-out',
setFocus: function() {
console.log('clicked focus-out container');
this.$().find('button').focus();
console.log('focus set to button');
}.on('click'),
focussedOut: function() {
console.log('focussedOut from outer container');
}.on('focusOut'),
});
{{#focus-out id="focus-container" tabindex="-1"}}
<button id="text-button">Test Button</button>
{{/focus-out}}
当我运行它并单击focus-out
元素时,这是日志的顺序。演示链接
- 单击焦点容器
- 从外部容器集中输出
- 焦点设置为按钮
现在,当我尝试使用以下代码为此编写验收测试时。
test('test visit / and click button', function() {
expect(0);
visit('/').then(function() {
find('focus-out').click();
console.log('after click in test');
});
});
日志的顺序不同。链接到演示。
- 单击焦点容器
- 焦点设置为按钮
- 点击测试后
- 从外部容器集中输出
focusOut
日志在最后打印,而不是在点击后日志之前。我期待日志的顺序相同,最后只有一个额外的日志(点击后)。
我不确定这是错误还是我的代码有问题。
我在执行测试时还注意到另一个问题。如果我在测试运行时专注于 chrome 开发工具,则该focusOut
事件根本不会触发。
对此的一些帮助非常感谢。