在angular e2e测试中获取浏览器路径会导致一个异常



我有一个简单的端到端测试来验证路由重定向工作

runner.html

<!doctype html>
<html lang="en">
  <head>
    <title>End2end Test Runner</title>
    <script src="../client/components/angular-scenario/angular-scenario.js" ng-autotest></script>
    <script src="e2e/scenarios.js"></script>
  </head>
  <body>
  </body>
</html>

scenarios.js

'use strict';
describe('e2e', function() {
  beforeEach(function() {
    browser().navigateTo('../../client/index.html');
  });
  it('should redirect to the main application home page with / is accessed', function() {
    browser().navigateTo('#!/');
    expect(browser().location().path()).toBe('/app');
  });
});

karma.conf.js

*snip*
files = [
  ANGULAR_SCENARIO,
  ANGULAR_SCENARIO_ADAPTER,
 './test/e2e/**/*.js',
];
*snip*

当它运行时,browser().location().path()将引发一个异常:

TypeError: 'undefined' is not a function (evaluating '$document.injector()')

我已经确定这是最后的。path()导致的问题,因为如果我做browser().location()不会引发异常。

但是在浏览器控制台中,这将返回一个angular.scenario.Future。

为什么会引发异常?

从我的头脑中,这里是AngularJS E2E测试不能工作的主要原因

    AngularJS的E2E测试需要你在应用的HTML中定义ng-app。如果你手动引导它,你需要自己添加它——Google Groups Discussion
  1. 确保您的代理是正确定义的,并确保您可以直接导航到它。在你的测试中,在browser. navigateto()之后添加一个pause(),并确保应用实际上是在浏览器中的AngularJS Scenario Runner中加载的。
  2. 调试的最后一步,在获得浏览器位置之前添加2到3秒的睡眠。可能是angularJS注入器无法与你的angularJS应用正常通信,导致它没有等待所需的时间。

希望其中一个对你有用!

相关内容

最新更新