对于使用Jasmine的AngularJS和BDD测试,我是一个非常新的(全新的)。我本周末的目标是让两者都更加胜任。
我目前正在关注angularJS网站上提供的教程,而且我正在本地处理这些文件。在Chapter 2中,它简要介绍了如何使用Jasmine创建Angular测试。
但是,我完全按照教程说明并且Jasmine失败了。测试只是为了确保在HTML中呈现3个电话。 (有)。
以下是测试:
describe('PhoneListCtrl', function() {
it('should create "phones" model with 3 phones', function() {
var scope = {},
ctrl = new PhoneListCtrl(scope);
expect(scope.phones.length).toBe(3);
});
});
我在tests.html页面上收到的错误是:
ReferenceError: PhoneListCtrl is not defined
这里的tests.html:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jasmine Spec Runner v2.0.0</title>
<link rel="shortcut icon" type="image/png" href="jasmine/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="jasmine/jasmine.css">
<script type="text/javascript" src="jasmine/jasmine.js"></script>
<script type="text/javascript" src="jasmine/jasmine-html.js"></script>
<script type="text/javascript" src="jasmine/boot.js"></script>
<!-- include source files here... -->
<script src="js/controllers.js"></script>
<!-- include spec files here... -->
<script type="text/javascript" src="spec/spec.js"></script>
</head>
<body>
</body>
</html>
我知道js / controllers.js没有什么问题,因为在我的index.html页面中正在渲染3个手机(通过Angular),所以我确实在设置Jasmine的地方出了问题但是没有完全确定在哪里...
更新 PhoneListCtrl定义如下:
var phonecatApp = angular.module('phonecatApp', []);
phonecatApp.controller('PhoneListCtrl', function ($scope) { .. });
我也尝试了以下内容:
describe('PhoneListCtrl', function(){
beforeEach(module('phonecatApp'));
it('should create "phones" model with 3 phones', inject(function($controller) {
var scope = {},
ctrl = $controller('PhoneListCtrl', {$scope:scope});
expect(scope.phones.length).toBe(3);
}));
});
但是上面我得到了&#39;模块&#39;没有定义......
答案 0 :(得分:3)
教程项目Angular-phonecat基于angular-seed,它使用karma测试运行器来运行jasmine测试。
所有JS文件都应包含在karma配置文件test/karma.conf.js
中。请参阅angular-phonecat来源的example。包含PhoneListCtrl的行是:
'app/js/**/*.js'
可以使用等于npm test
的{{1}}运行测试(命令在karma start test/karma.conf.js
文件上配置)
如果你按照tutorial main page的指示克隆了angular-phonecat项目,你应该已经有了工作的业力配置文件。