如何使用$setPristine对AngularJS控制器进行单元测试
发布时间:2020-12-17 17:05:37 所属栏目:安全 来源:网络整理
导读:我有以下控制器: – appControllers.controller("TaskAddController",function ($scope,$timeout,taskService) { $scope.task = {}; $scope.messages = { error: false }; $scope.actions = { save : function() { if ($scope.frmAddTask.$valid) { taskSer
我有以下控制器: –
appControllers.controller("TaskAddController",function ($scope,$timeout,taskService) { $scope.task = {}; $scope.messages = { error: false }; $scope.actions = { save : function() { if ($scope.frmAddTask.$valid) { taskService.insert($scope.task) .then( function() { $scope.messages.success = true; $scope.task = {}; $scope.frmAddTask.$setPristine(); $timeout(function() { $scope.messages.success = false; },3000); },function() { $scope.messages.error = true; } ); } else { $scope.messages.error = true; } } }; }); 有了这个单元测试: – /// <reference path="../../../../src/tasks.web/scripts/angular-1.2.10.js" /> /// <reference path="../../../../src/tasks.web/scripts/angular-route-1.2.10.js" /> /// <reference path="../../../../src/tasks.web/scripts/app.js" /> /// <reference path="../../../../src/tasks.web/scripts/services.js" /> /// <reference path="../../../../src/tasks.web/scripts/controllers.js" /> /// <reference path="../lib/angular/angular-mocks.js" /> describe("TaskAddController",function() { var createController,scope,deferred,mockTaskService; beforeEach(function () { module('appControllers'); module('appServices'); inject(function ($rootScope,$q,taskService) { scope = $rootScope.$new(); scope.frmAddTask = { $valid: true }; deferred = $q.defer(); mockTaskService = taskService; spyOn(mockTaskService,"insert").andReturn(deferred.promise); }); inject(function ($controller) { createController = function () { return $controller("TaskAddController",{ $scope: scope,taskService: mockTaskService }); }; }); }); it("when actions.save is called then messages.success should be true",function () { var task = { title: "Title",description: "Description" }; createController(); scope.task = task; scope.actions.save(); deferred.resolve("insert"); scope.$root.$digest(); expect(scope.messages.success).toEqual(true); }); }); 消息TypeError:’undefined’的错误不是函数(评估’$scope.frmAddTask.$setPristine()’) 我假设这是因为单元测试只测试控制器,$scope.frmAddTask仅在视图存在时才存在.所以我的问题是如何正确地进行单元测试? 解决方法
是的,通常由ngForm指令创建$scope.frmAddTask对象.但是,在这种情况下,它是由您在测试中创建的:
scope.frmAddTask = { $valid: true }; 既然你正在使用这个模拟对象,我建议在它上面删除$setPristine方法: scope.frmAddTask = { $valid: true,$setPristine: function() {} }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读