单元测试 AngularJS 控制器,同时遵循最佳实践
Unit testing AngularJS Controller whilst following best practice
我们正在按照 here.
概述的一些最佳实践指南构建一个 AngularJS 应用程序
我特别有兴趣测试一个非常简单的控制器来起床和 运行 业力。
控制器代码为:
angular.module('ttn').controller('Login', Login);
function Login(){
var login = this;
login.title = 'foo bar content here etc';
}
规格代码为:
describe('Controller: Login', function () {
beforeEach(module('ttn'));
var scope, controller;
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
controller = $controller('Login', {
$scope: scope
});
scope.$digest();
}));
it('should define a title', function () {
expect(scope.title).toBeDefined();
});
});
这失败了,期望未定义被定义。
如果我将控制器更改为:
angular.module('ttn').controller('Login', Login);
function Login($scope){
$scope.title = 'foo bar whatsit jibber';
}
然后测试按预期通过了。我不确定如何引用以上述方式编写的控制器 link 以使测试通过。
由于您的控制器不使用 $scope,因此您不应注入它并在测试中使用它。相反,您应该检查控制器上的标题:
describe('Controller: Login', function () {
beforeEach(module('ttn'));
var controller;
beforeEach(inject(function ($controller) {
controller = $controller('Login', {});
}));
it('should define a title', function () {
expect(controller.title).toBeDefined();
});
});
我们正在按照 here.
概述的一些最佳实践指南构建一个 AngularJS 应用程序我特别有兴趣测试一个非常简单的控制器来起床和 运行 业力。
控制器代码为:
angular.module('ttn').controller('Login', Login);
function Login(){
var login = this;
login.title = 'foo bar content here etc';
}
规格代码为:
describe('Controller: Login', function () {
beforeEach(module('ttn'));
var scope, controller;
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
controller = $controller('Login', {
$scope: scope
});
scope.$digest();
}));
it('should define a title', function () {
expect(scope.title).toBeDefined();
});
});
这失败了,期望未定义被定义。
如果我将控制器更改为:
angular.module('ttn').controller('Login', Login);
function Login($scope){
$scope.title = 'foo bar whatsit jibber';
}
然后测试按预期通过了。我不确定如何引用以上述方式编写的控制器 link 以使测试通过。
由于您的控制器不使用 $scope,因此您不应注入它并在测试中使用它。相反,您应该检查控制器上的标题:
describe('Controller: Login', function () {
beforeEach(module('ttn'));
var controller;
beforeEach(inject(function ($controller) {
controller = $controller('Login', {});
}));
it('should define a title', function () {
expect(controller.title).toBeDefined();
});
});