我正在使用AngularJS实现我的第一个Web应用程序(仅遵循AngularJS教程),我正在使用Jasmine和Karma编写一些测试。
这是我的app.spec.js
文件:
describe('PhoneListController', function() {
beforeEach(module('phonecatApp'));
it('should create a `phones` model with 3 phones', inject(function($controller) {
var scope = {};
var ctrl = $controller('PhoneListController', {$scope: scope});
expect(scope.phones.length).toBe(3);
expect(scope.name).toBe('world');
}));
});
哪个正常。但是,当我将其更改为:
describe('PhoneListController', function() {
beforeEach(module('phonecatApp'));
it('should create a `phones` model with 3 phones', inject(function($controller) {
var scope = {};
var ctrl = $controller('PhoneListController', {$scope: scope});
expect(scope.phones.length).toBe(3);
}));
it('should have world as a name', inject(function($controller) {
expect(scope.name).toBe('world');
}));
});
第二种方法有什么问题?我认为,粗略地说,每个it
语句对应一个测试用例,每个describe
语句对应一个测试套件。这是错的吗?
感谢。
答案 0 :(得分:1)
它不会被执行,就好像它们是一个延续。此外,scope
变量是第一次测试的本地变量。
如果我们将其分解,第二个例子就是大致:
function test1() {
module('phonecatApp');
var scope = {};
var ctrl = $controller('PhoneListController', {$scope: scope});
expect(scope.phones.length).toBe(3);
}
function test2() {
module('phonecatApp');
expect(scope.name).toBe('world');
}
test1();
test2();
您可以看到,在第二个测试中,没有可用的范围或控制器变量。