Karma 测试在 Edge 中随机重启和 "double" iframe
Karma tests randomly restart and "double" iframe in Edge
我的 Angular 7 应用程序有一套 Karma/Jasmine 测试。我所有的测试都在 Chrome 和 Firefox 中通过,但是当我在 Edge 中 运行 它们时,它会 运行 一点点,然后有时它会随机重新加载页面并重新开始,有时它会再次将业力加载到 iframe 中,因此 "doubling" 它。
这是它的样子
但是,当我单击 "Debug" 按钮时,它会打开一个新选项卡,所有测试 运行 都很好,没有失败。
这是我的控制台输出的样子。您可以看到它 运行 进行了一些测试,然后重新启动它们
这是怎么回事?
为什么在没有测试失败的情况下它在 Edge 中会这样?
我弄明白哪里出了问题,原来是导航问题。
我在模板中有一个带有 href="#"
的组件,如下所示:<a href="#" (click)="doSomething($event)">
然后处理如下:
doSomething($event: Event): void {
$event.preventDefault();
someService.whatever();
}
在我的测试中我遇到了这样的事情
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething');
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});
但这导致 Edge(由于某种原因而不是其他浏览器)尝试导航到导致测试重新加载的 #
。解决方案是只添加 .and.callThrough()
以便组件可以 运行 $event.preventDefault()
以防止在测试中导航。
所以,上面的测试现在看起来像这样
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething').and.callThrough(); //call through to run preventDefault() on the click event
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});
我的 Angular 7 应用程序有一套 Karma/Jasmine 测试。我所有的测试都在 Chrome 和 Firefox 中通过,但是当我在 Edge 中 运行 它们时,它会 运行 一点点,然后有时它会随机重新加载页面并重新开始,有时它会再次将业力加载到 iframe 中,因此 "doubling" 它。
这是它的样子
但是,当我单击 "Debug" 按钮时,它会打开一个新选项卡,所有测试 运行 都很好,没有失败。
这是我的控制台输出的样子。您可以看到它 运行 进行了一些测试,然后重新启动它们
这是怎么回事?
为什么在没有测试失败的情况下它在 Edge 中会这样?
我弄明白哪里出了问题,原来是导航问题。
我在模板中有一个带有 href="#"
的组件,如下所示:<a href="#" (click)="doSomething($event)">
然后处理如下:
doSomething($event: Event): void {
$event.preventDefault();
someService.whatever();
}
在我的测试中我遇到了这样的事情
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething');
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});
但这导致 Edge(由于某种原因而不是其他浏览器)尝试导航到导致测试重新加载的 #
。解决方案是只添加 .and.callThrough()
以便组件可以 运行 $event.preventDefault()
以防止在测试中导航。
所以,上面的测试现在看起来像这样
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething').and.callThrough(); //call through to run preventDefault() on the click event
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});