错误调试带有节点8异步/等待和角度6的量角器

时间:2018-12-14 20:19:11

标签: angular jasmine protractor

我无法使量角器调试器与节点8 async / await和Angular 6一起工作。以旧的方式使用elementExplorerbrowser.pause()browser.debugger()回到节点7是不是一个选择。同样是因为将来,control flow已从Selenium中删除,并且我不断阅读到,使用节点8 async / await而不是control flow是一种更好的调试体验。

我正在使用角度6.0.3,角度CLI 6.0.5,节点8.11.2和Chrome 71.0.3578.98。我通过使用CLI生成测试应用程序来重现该问题:

ng new stack-overflow-debugging-protractor --style=scss --routing

使用angular CLI生成此应用程序会自动安装并配置量角器5.3.2。

我有一个简单的测试,成功运行ng e2e

describe('workspace-project App', () => {
  it('should display welcome message', () => {
    browser.get('/');
    expect(element(by.css('app-root h1')).getText()).toEqual('Welcome to app!');
  });
});

I follow this document to set up my debugging environment

要使其与异步/等待一起使用,我需要禁用control flow,因此在protractor.conf.js中添加SELENIUM_PROMISE_MANAGER: false,在./e2e/tsconfig.e2e.json中将"target": "es5"更改为{ {1}}

在e2e测试中,我添加了"target": "es2017"async并添加了命令await

debugger

当我执行describe('workspace-project App', () => { it('should display welcome message', async () => { await browser.get('/'); debugger; await expect(element(by.css('app-root h1')).getText()).toEqual('Welcome to app!'); }); }); 时,它仍然可以成功运行:

我在终端会话中运行调试器:

ng e2e

我在浏览器中打开Chrome检查器node --inspect-brk ./node_modules/protractor/bin/protractor ./e2e/protractor.conf.js ,找到当前运行的目标并单击chrome://inspect/#devices。然后,我单击按钮inspect(或F8),然后测试应该在第一行使用resume script execution关键字暂停。

但不是,Chrome会自动打开一个错误为debugger的新窗口。 Chrome DevTools的控制台为空。终端会话给出:

ERR_CONNECTION_REFUSED

因此,我阅读了建议,并将E/protractor - Could not find Angular on page http://localhost:4200/ : retries looking for angular exceeded Failed: Angular could not be found on the page http://localhost:4200/. If this is not an Angular application, you may need to turn off waiting for Angular. Please see https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load 添加到getPageTimeout: 60000中。然后我得到错误:

protractor.conf.js

似乎是相同的错误,因此我将Failed: Error while running testForAngular: script timeout: result was not received in 11 seconds protractor.conf.js更改为allScriptsTimeout: 11000。然后我得到错误:

60000

同样,我将Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. at ontimeout (timers.js:498:11) at tryOnTimeout (timers.js:323:5) (node:11716) UnhandledPromiseRejectionWarning: Error: 'fail' was used when there was no current spec, this could be because an asynchronous test timed out (node:11716) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which wasnot handled with .catch(). (rejection id: 1) 的{​​{1}}行protractor.conf.js更改为defaultTimeoutInterval: 30000。同样的错误。

我还尝试了更高的值200000,但是结果是等待时间更长,但错误是相同的。

谁知道该问题的解决方案?

1 个答案:

答案 0 :(得分:2)

运行量角器不会直接启动应用程序来运行测试,这是工作ng e2e命令的一部分。

要解决此问题,您可以使用ng serve在单独的终端窗口中启动应用程序,或者可以使用ng e2e命令运行调试器(这将在后台启动应用程序):

node --inspect-brk ./node_modules/.bin/ng e2e