我目前正在与Angular 以及使用 Karma 和 Jasmine进行测试。例如,过滤器被注入到主模块中,并且可以毫无问题地进行测试,但是当我尝试测试控制器时,我得到了一个空物体注射后。
这是我的主模块的代码:
(function () {
'use strict';
var dependencies = [];
angular.module('myApp', dependencies)
}());
我要测试的控制器:
(function () {
'use strict';
angular.module('myApp')
.controller('NavCtrl', ['$scope',
function ($scope) {
$scope.currentUser = null;
}]);
}());
最后是测试套件:
describe ("controller", function() {
beforeEach(module("myApp"));
var $scope, $rootScope, controllerLoader;
beforeEach(inject(function($injector) {
$rootScope = $injector.get('$rootScope');
$scope = $rootScope.$new();
var $controller = $injector.get('$controller');
controllerLoader = function() {
return $controller('NavCtrl', {
'$scope': $scope
});
};
}));
it ("testing injection", function() {
var controller = controllerLoader();
expect(controller).toNotEqual({});
})
});
但测试的结果是FAIL,调试后我发现注入的控制器是空的。我已经尝试为控制器提供一个假名称,并且测试只是崩溃,这意味着检测到了控制器,但出于某种原因我没有获取其属性。
我也有类似的问题。不同之处在于,在我的应用程序中,我使用的是 RequireJS,因此某些部分略有不同,但我想总体可能会对您有所帮助。
我修改了它以匹配你的名字:
define(['app/app.module', 'angular', 'angular-mocks'], function () {
describe('Controller Unit test', function () {
var $controller;
beforeEach(module('myApp'));
beforeEach(inject(function (_$controller_) {
// The injector unwraps the underscores (_) from around the parameter names when matching
$controller = _$controller_;
}));
describe('Get the controller', function () {
it('should contain controller', function () {
var $scope = {};
var controller = $controller('NavCtrl', {$scope: $scope});
console.log(controller);
expect(controller).toBeDefined();
});
});
});
});
加载角度和角度模拟非常重要。不过我认为主要问题是你的controllerLoader
函数在beforeEach
部分。注射必须在describe
测试本身的部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)