我在通过量角器测试时遇到问题。就目前而言,该项目基于默认的角度5应用程序,但具有其他样式/模板/布局/组件。因此,角度附带的默认e2e测试不会通过。量角器配置看起来与默认配置相同。
日志告诉:
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
测试:
describe('angular App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('Welcome to app!');
}, 100000);
});
页:
export class AppPage {
navigateTo() {
return browser.get('/');
}
getParagraphText() {
return element(by.css('.test-header')).getText();
}
}
我已经对代码本身进行了一些调试。导航部分成功执行并导航到URL,但当它尝试解析来自getText()
的承诺时,整个执行停止。感觉它被封锁了。
有没有办法找出阻塞量角器执行的内容,或者至少在尝试运行测试时观察正在运行的异步任务是什么?
对此还有其他解决方案吗?
我对e2e测试很新,所以任何帮助都会受到赞赏。感谢。
编辑:在browser.waitForAngularEnabled(false)
之前添加browser.get('/')
解决问题,但我认为它只是一个临时的创可贴
答案 0 :(得分:1)
我发现了什么导致了这个问题,虽然我还没有完全调查过它。
我已经开始通过删除所有模块来解析应用程序,直到我最终删除了根Routes
。测试开始正常。之后,我更改了Router
设置,如ng new app
,但没有正面结果。然后,开始检查配置文件,发现在.angular-cli.json
scripts
数组中注册为全局的一堆库。其中一个是pace.js
,删除后,测试恢复了。
我没有多看那个库的来源,所以我可能错了,但我的猜测是它广泛使用了超时,它导致测试框架无限期地等待它们完成。
如果有人发现确切原因,请将其留在评论中。
答案 1 :(得分:1)
在量角器conf.js中增加jasmine默认超时间隔
exports.config = {
defaultTimeoutInterval: 2000000,
}
答案 2 :(得分:0)
您没有考虑getText()返回一个promise。 expect()不会为你解开它并卡住。因此,为了达到目标,你应该更进一步。
describe('angular App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', async () => {
page.navigateTo();
page.getParagraphText().then(text => {
expect(text).toEqual('Welcome to app!');
});
}, 100000);
});
应该这样做。