我在app / scripts下定义了一个相当简约的app(一个Controller,三个指令)。
当使用karma start
运行karma时,我导航到localhost:9100,单元测试运行。但是,当我使用karma start karma-2e2.conf.js
运行时,运行错误输出:
[31mChrome 27.0 (Mac) I haz all the things I haz grid FAILED[39m
TypeError: Cannot read property 'name' of undefined
Chrome 27.0 (Mac): Executed 1 of 1[31m (1 FAILED)[39m
我的测试生活在test / e2e / spec / * .js
我的karma-e2e.conf.js内容如下:
basePath = '';
files = [
ANGULAR_SCENARIO,
ANGULAR_SCENARIO_ADAPTER,
'app/components/jquery/jquery.js',
'app/components/angular/angular.js',
'test/e2e/**/*.js'
];
proxies = {
'/' : 'http://localhost:9000'
}
exclude = [];
reporters = ['progress'];
port = 8080;
runnerPort = 9100;
colors = true;
logLevel = LOG_INFO;
autoWatch = false;
browsers = ['Chrome'];
captureTimeout = 5000;
singleRun = false;
我的测试是:
describe('I haz all the things', function(){
beforeEach(function(){
browser().navigateTo('/');
});
it('I haz grid', function(){
expect(angular.element('div.grid-item').count).toEqual(1);
});
});
为什么会失败,我该如何解决?
答案 0 :(得分:3)
您的测试语法错误
需要:
expect(repeater('div.grid-item').count()).toEqual(1);
阅读e2e领域特定的语言......它不是棱角分明的或者是jquery,它有点神秘,但功能强大。
为了更好地调试e2e测试,请使用测试运行器而不是使用Karma。这是angular-seed starter app附带的名为runner.html的文件:
<!doctype html>
<html lang="en">
<head>
<title>End2end Test Runner</title>
<script src="../lib/angular/angular-scenario.js" ng-autotest></script>
<script src="scenarios.js"></script>
</head>
<body>
</body>
</html>
只需在浏览器中导航到runner.html,它就会开始在您面前运行测试,只需刷新即可重新运行。您可以在测试中添加pause(),测试将在此时停止并提示您继续。您可以使用firebug或其他调试器来查看应用程序的状态。