请建议如何编写以下angularjs代码的Jasmine测试用例

时间:2015-12-23 18:06:33

标签: javascript angularjs unit-testing jasmine

在下面的示例中,我想模拟dataService。问题是我需要在函数(数据)下返回数据后测试功能。

由于逻辑依赖于返回的数据。我认为嘲笑/窥探dataservice可能无助于此。

请提供可能的解决方案。

var app = angular.module('app', []);
app.controller('Controller', ['$scope', '$location', 'dataService', '$window', 'OtherService', 'Config', function ($scope, $location, dataService, $window, SomeService, Config) {

$scope.btnClick = function () {
    var SomeNumber = $scope.enteredNumber;
    if (SomeNumber == "xyz") {
        $scope.errorType = 'errorRequired';
    }
    else {

        dataService.validate_enteredNumber(SomeNumber, function (data) {
                                if (data != null) {
                                  if (data.responsetype == 1) {
                                        $scope.errortype = data.responsemessage;
                                    }
                    else {
                        dataservice.getdetailsforenterednumber(data.responsemessage, function (getdata) {
                            if (getdata.responsetype == 1) {
                                $scope.errortype = getdata.responsemessage;
                            }
                            else if (getdata.responsetype == 2) {
                                if (getdata.responsemessage.touppercase() == "consumer")
                                    $window.location.href = "url";
                            }
                            else
                                $location.path('/Somelist').search({ SomeNumber: getdata.responsemessage });
                        });
                    }
                                    }



        });
    }
}


if ($location.search().SomeNumber != null) {
    $scope.enteredNumber = $location.search().SomeNumber;
    $scope.btnClick();
}

} ]);

1 个答案:

答案 0 :(得分:0)

我不完全确定你追求的是什么。假设您只想在调用validate_enteredNumber函数后测试功能,您仍然可以监视该函数并提供模拟结果。

spyOn(data_service, 'validate_enteredNumber').andReturn(mockObjectYouCreate);