Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用$setPristine对AngularJS控制器进行单元测试大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_618_0@
@H_618_0@
我有以下控制器: –

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() {}
};
@H_618_0@

大佬总结

以上是大佬教程为你收集整理的如何使用$setPristine对AngularJS控制器进行单元测试全部内容,希望文章能够帮你解决如何使用$setPristine对AngularJS控制器进行单元测试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:angularjssetpristine使用单元如何控制器测试进行
猜你在找的Angularjs相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap