量角器getText永远无法解析

时间:2018-03-13 23:32:13

标签: angular protractor

我在通过量角器测试时遇到问题。就目前而言,该项目基于默认的角度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('/')解决问题,但我认为它只是一个临时的创可贴

3 个答案:

答案 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);
});

应该这样做。