在角度e2e测试中获取浏览器路径会导致异常

时间:2013-03-26 18:39:52

标签: angularjs

我有一个简单的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。

为什么会引发异常?

1 个答案:

答案 0 :(得分:2)

从头顶来看,以下是AngularJS E2E测试不起作用的主要原因

  1. AngularJS E2E测试需要您在应用程序中的HTML中定义ng-app。如果您手动引导它,则需要自己添加它 - Google Groups Discussion
  2. 确保您的代理已正确定义,并确保您可以直接导航到它。在browser.navigateTo()之后立即在测试中添加一个pause(),并确保该应用程序实际上已在浏览器中的AngularJS Scenario Runner中加载。
  3. 调试的最后一步,在获取浏览器位置之前添加睡眠2到3秒。可能是angularJS注入器无法正确地与AngularJS应用程序通信,这导致它不会等待所需的时间。
  4. 希望其中一个能帮到你!