我们正在按照 here 概述的一些最佳实践指南构建 AngularJS 应用程序。 .
我特别有兴趣测试一个非常简单的 Controller 来启动并运行 karma。
Controller 代码是:
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();
});
});
这会失败,因为期望定义未定义。
如果我将 Controller 更改为:
angular.module('ttn').controller('Login', Login);
function Login($scope){
$scope.title = 'foo bar whatsit jibber';
}
测试随后按预期通过。我不确定如何引用以上述链接中概述的方式编写的 Controller 以使测试通过。
最佳答案
由于您的 Controller 不使用 $scope,因此您不应注入(inject)它并在测试中使用它。相反,您应该检查 Controller 上的标题:
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();
});
});
关于javascript - 单元测试 AngularJS Controller ,同时遵循最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297235/