我有一个简单的端到端测试来验证路由重定向工作
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
- 确保您的代理是正确定义的,并确保您可以直接导航到它。在你的测试中,在browser. navigateto()之后添加一个pause(),并确保应用实际上是在浏览器中的AngularJS Scenario Runner中加载的。
- 调试的最后一步,在获得浏览器位置之前添加2到3秒的睡眠。可能是angularJS注入器无法与你的angularJS应用正常通信,导致它没有等待所需的时间。
希望其中一个对你有用!