茉莉因果报应。在特定数量的测试后测试失败(页面重新加载错误)

Jasmine Karma . Test failing after a specific number of tests(page reload error)

我正在使用 karma jasmine 测试一个 angular 应用程序,我有大约 10 个规范文件,总共有 10 个描述和 48 个测试用例。问题是,只要测试用例超过 47,我就会收到错误消息,错误说,一些测试重新加载了整页。我尝试通过注释掉随机测试用例并将其限制为 47 ,然后它工作正常。即使是空白的第 48 个测试用例也会出现错误,

"jasmine-core": "^2.4.1",
"jshint-stylish": "^1.0.0",
"karma": "^0.13.21",
"karma-chrome-launcher": "^0.2.2",
"karma-coverage": "^0.5.3",
"karma-firefox-launcher": "^0.1.7",
"karma-jasmine": "^0.3.7",
"karma-ng-html2js-preprocessor": "^0.2.1",
"karma-phantomjs-launcher": "^1.0.0",

这是我的 karma 版本和相关依赖项。

它与您的一项或多项测试重新加载有关。不幸的是,业力并没有告诉你是哪个。

这是来自这个 issue 的解决方案。

1) 运行 您的应用程序包含以下代码,然后 DevTools(Chrome,在本例中)打开。

console.profile('cause of reload');

window.addEventListener('beforeunload', function() {
    console.profileEnd('cause of reload');
    debugger;
});

如果您正在寻找的重新加载发生,您应该被带到 Chrome Devtools 的 "Sources" 视图,应用程序暂停在调试器行。

2) 导航至 "Profiles" 选项卡并选择 "Charts" 视图。

3) Command+F 并搜索 "location".

4) 使用搜索框中的向上和向下箭头跳转到该短语的最后出现的匹配项。

5) 在搜索字段中按回车键跳转到匹配项。

6) 回顾调用堆栈以查找您认识的代码。

归功于 JamieMason

我只是使用带有 href 的锚标记,但因为重新加载它对我来说也会失败 “您的一些测试做了整页重新加载!”。我想测试在点击过程中调用的函数,所以这是我在测试中的解决方案:

    const link = fixture.debugElement.query(By.css('a'));
    link.triggerEventHandler('click', null);

问题在于:

    link.click();

这样您就可以在不导航和刷新页面的情况下触发点击。