Angular 8 集成测试 - Proctrator/Jasmine 有效,Protractor/Cucumber 无效

Angular 8 Integration Test - Proctrator/Jasmine works, Protractor/Cucumber doesn't

我正在为我的 Angular 8 应用程序设置我认为是简单的 e2e 测试。我正在尝试学习 BDD,所以我尝试将 Jasmine 换成 Cucumber,因为它使用的语言更符合 BDD。

当我运行Protractor使用Jasmine时,测试通过:

这个有效:

navigateTo () {
    return browser.get(browser.baseUrl) as Promise<any>;
}

当我运行测试一个黄瓜版本时,我得到一个错误。

这失败了:

  Given ('Evidentia4 is running', (done) => {
           browser.get (browser.baseUrl)
          .then (done ());
  });

"Error while waiting for Protractor to sync with the page: "angularJS 可测试性和angular 可测试性均未定义。

量角器配置:

exports.config = {
  allScriptsTimeout: 61000,
  getPageTimeout: 60000,
  specs: [
    './src/features/**/*.feature'
  ],
  capabilities: {
    browserName: 'chrome'
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'custom',
  frameworkPath: require.resolve('protractor-cucumber-framework'),
  cucumberOpts: {
    require: 'features/step-definitions/app-step-definitions.js',
    tags: false,
    format: 'node_modules/cucumber-pretty',
    profile: false,
    'no-source': true
  }
};

我已阅读有关该错误的信息,但不知道为什么会出现此错误。

你能检查一下 AngularTestability API 的 is_stable 标志是否为真。如果为真,请检查需要多长时间才能变为真。有时 Angular 网页变得稳定需要更长的时间。 Protractor 使用 is_stable 标志与页面同步。您可以尝试将其关闭(不建议在 angular 页上使用),但请试一试以查明错误。您可以通过显式设置 browser.ignoreSynchronisation = true 来实现。现在您的测试不会等待 Angular promises 解决。如果这有效,那么您应该看看 is_stable 标志变为真需要多长时间。有时可能有第三方应用程序导致网页不稳定。请注意,只有当所有承诺都已解决时,angular 网页才是稳定的。如果是这种情况,您可以等待页面稳定后再执行测试。

它在茉莉花中起作用而不在黄瓜中起作用的原因很奇怪。也许黄瓜比茉莉花执行得更快。不过我不确定。

另外,请在您的浏览器中将 SELENIUM_PROMISE_MANAGER 设置为 false,以便您知道是否遗漏了任何承诺。