在使用Jasmine进行测试时,Angularjs将控制器注入空
发布时间:2020-12-17 18:03:40 所属栏目:安全 来源:网络整理
导读:我目前正在与Angular合作并使用Karma和Jasmine进行测试.例如,过滤器被注入主模块并且可以毫无问题地进行测试,但是当我尝试测试控制器时,我在注入后得到一个空对象. 这是我的主要模块的代码: (function () { 'use strict'; var dependencies = []; angular.m
我目前正在与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部分.注射必须在测试本身的描述部分中进行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |