7

我有一个简单的 e2e 测试来验证路由重定向是否有效

亚军.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>

场景.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');
  });
});

业力.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。

为什么会引发异常?

4

1 回答 1

2

在我看来,这是 AngularJS E2E 测试不起作用的主要原因

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

希望其中一个对您有用!

于 2013-05-15T02:38:19.907 回答