网站搜索

angular - ng e2e 测试超时


问题

我的端到端测试在一段时间前停止工作了,而我没有对它做任何更改。我不知道为什么会超时,也不确定如何自己诊断。我了解到我的测试中的代码实际上是一个在 Angular 准备好时运行的 Promise,而之前不知道这一点让我错误地认为问题是我的测试在 Angular 准备好之前就开始运行了。

现在我在 page.getParagraphText() 调用上使用了 .then(...) 和 .catch(...) 来查看最终发生了什么。经过 30 秒(我已经增加了愿意等待的时间),它以超时错误退出。我访问了它建议的 URL 并尝试了任何看起来相关的东西,但都没有用。

版本

ng version

    _                      _                 ____ _     ___
   / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
  / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
 / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
/_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
               |___/

Angular CLI: 1.6.3
Node: 8.9.4
OS: win32 x64
Angular: 5.1.3
... animations, common, compiler, compiler-cli, core, forms
... http, platform-browser, platform-browser-dynamic
... platform-server, router, service-worker

@angular/cli: 1.6.3
@angular/language-service: 4.4.6
@angular-devkit/build-optimizer: 0.0.36
@angular-devkit/core: 0.0.22
@angular-devkit/schematics: 0.0.42
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.3
@schematics/angular: 0.1.11
@schematics/schematics: 0.0.11
typescript: 2.4.2
webpack: 3.10.0

截图

我的量角器配置与我创建的任何新的 Angular CLI 项目匹配,而且我生成的那些新项目的端到端测试没有问题。我没有更改我最初创建的应用程序的默认端到端测试,但确实很想开始在端到端测试领域编写更多测试。

起初,我以为浏览器没有被捕获,因为我以前遇到过这个错误。但当我弄清楚如何在 VS Code 中调试端到端测试时,我注意到这与我过去见过的问题不同。

问题

我如何诊断卡住的原因?这些测试超时是否有比较常见的原因?

app.po.ts

import { browser, by, element } from 'protractor'; 

export class TDPortalPage { 
    navigateTo() { return browser.get('/'); } 

    getParagraphText() { 
        return element(by.css('header.header > div.header-content > div.header-logo > a.logo > span.header-title')).getText(); 
    } 
}

更新

我仍然在遇到这个问题。我还了解到的另一件事是,只要我调整在端到端测试过程中弹出的窗口大小,测试就会立即运行。但显然,我不想每次测试运行都手动调整窗口大小。这是否暗示了问题可能出在哪里?

换句话说,如果我对每个测试都这样做,它们会运行:

import { browser } from 'protractor';

import { TDPortalPage } from './app.po';

describe('tdportal App', () => {
  let page: TDPortalPage;

  beforeEach(() => {
    page = new TDPortalPage();
  });

  it('should display message saying Title', () => {
    page.navigateTo()
      // THIS IS WHAT ALLOWS MY TEST TO RUN.  BUT I HAVE TO DO IT TO EACH TEST.
      .then(_ => browser.manage().window().setSize(800, 600));
    expect(page.getParagraphText()).toEqual('Title');
  });
});

答案#1

查看 Protractor 官方网站关于超时的信息: http://www.protractortest.org/#/timeouts

exports.config = {

    allScriptsTimeout: (30 * 1000),