【发布时间】:2017-06-18 22:19:58
【问题描述】:
我正在尝试编写一个单元测试来检查焦点事件的影响是否发生。我的实际测试用例更复杂,但我使用以下代码创建了一个最小复制:
it('testing input focus', async(() => {
let showDiv = false;
const template = `<div *ngIf="shouldShow" class='hidden-div'>
SHOW ME WHAT YOU GOT
</div>
<input (focus)="shouldShow = !shouldShow" name="input">`;
buildTestComponent(template, {shouldShow: showDiv}).then((fixture) => {
fixture.detectChanges();
const inputEl: HTMLInputElement = fixture.nativeElement.querySelector('input');
expect(fixture.nativeElement.querySelector('.hidden-div')).toBe(null);
inputEl.focus();
fixture.detectChanges();
expect(fixture.nativeElement.querySelector('.hidden-div')).not.toBe(null);
});
}));
当我使用 karma 运行此测试时,只要我专注于运行 karma 目标的 chrome 选项卡,测试就会通过。但是,如果浏览器没有焦点,则测试失败(即使浏览器可见,但我单击另一个窗口)并显示错误消息:
Expected null not to be null.
我假设当 Chrome 选项卡没有焦点时, inputEl.focus() 调用实际上并没有被调用,但我不知道如何修复它。无论浏览器焦点如何,我编写的所有其他单元测试都通过了。有没有人遇到过这个或者有什么想法?
【问题讨论】:
-
今天遇到了同样的问题。不确定修复它的最优雅的方法是什么。
标签: unit-testing angular jasmine karma-jasmine