Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何为以下使用API和回调的angular服务编写jasmine测试_Angularjs_Callback_Jasmine - Fatal编程技术网

Angularjs 如何为以下使用API和回调的angular服务编写jasmine测试

Angularjs 如何为以下使用API和回调的angular服务编写jasmine测试,angularjs,callback,jasmine,Angularjs,Callback,Jasmine,在我的AngularJS应用程序中,我很难理解如何对以下代码进行单元测试: 这是我的测试控制器正在使用的服务: angular .module('web.template') .factory('testService', testService); testService.$inject = ['$http']; function testService($http) { return { getTestDatas: function (callba

在我的AngularJS应用程序中,我很难理解如何对以下代码进行单元测试:

这是我的测试控制器正在使用的服务:

angular
    .module('web.template')
    .factory('testService', testService);

testService.$inject = ['$http'];

function testService($http) {
   return { 
        getTestDatas: function (callback) {
        var data = {
            'testParams': "test"
        };

        $http.post('http://localhost/test/post', data)
            .success(function (response) {
                callback(response);
            });
        },
    };
};
如中所述,您可以使用
$httpBackend
$http
进行模拟

您可以测试实现服务的两种方法(回调或承诺)。但我也认为,承诺更值得检验,应该优先考虑

只需在依赖项中包含
ngMock
,就可以为url创建一个假响应

请看下面的演示(不工作,所以需要检查问题所在)或

angular
.module('web.template',['ngMock'])
.controller('mainCtrl',mainCtrl)
.工厂(“测试服务”,测试服务);
testService.$inject=['$http'];
函数testService($http){
返回{
getTestDatas:函数(回调){
var data=$.param({/$.param用于JSFIDLE)
json:json.stringify({//json包装器,仅用于JSFIDLE
testParams:“测试”
}),
延误:1
});
返回$http.post('/echo/json/',data)
.成功(功能(响应){
控制台日志(响应);
回调?回调(响应):未定义;
});
},
};
};
函数MainCtrl($scope,testService){
var getDataCb=函数(响应){
$scope.data=响应;
};
getTestDatas(getDataCb);
}
MainCtrl.$inject=['$scope','testService'];
//规格代码
描述(“用于$http服务的测试套件”,函数(){
var$httpBackend、$rootScope、$testService;
//设置模块
在每个模块之前(模块('web.template');
每次之前(注入(函数($injector){
//设置模拟http服务响应
$httpBackend=$injector.get(“$httpBackend”);
//所有测试通用的后端定义
var fakedMainResponse={testParams:'testMocked'};
$httpBackend.when('POST','/echo/json/').response(fakedMainResponse);
//authRequestHandler=$httpBackend.when('GET','/echo/json/'))
//.respond({testParams:'testMocked'});
$testService=$injector.get('testService');
//获得作用域(即根作用域)
$rootScope=$injector.get(“$rootScope”);
//$controller服务用于创建控制器的实例
//var$controller=$injector.get(“$controller”);
//createController=函数(){
//返回$controller('MyController',{'$scope':$rootScope});
//};
}));
之后(函数(){
$httpBackend.VerifyNoOutstandingExpection();
$httpBackend.verifyNoOutstandingRequest();
});
它(“服务器应通过回调返回测试值”,函数(){
//期望(真),期望(假);
$testService.getTestDatas(函数(响应){
console.log('测试服务',响应);
expect(response).toEqual({“testParams”:“testMocked”});
//期望(真),期望(假);
});
$httpBackend.flush();
});
它(“服务器应返回带有承诺的测试值”,函数(){
//期望(真),期望(假);
$testService.getTestDatas(未定义).then(函数(响应){
expect(response.data).toEqual({“testParams”:“testMocked”});
});
$httpBackend.flush();
});
});
//加载jasmine htmlReporter
(功能(){
var env=jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
execute();
}());

{{data | json}
如中所述,您可以使用
$httpBackend
$http
进行模拟

您可以测试实现服务的两种方法(回调或承诺)。但我也认为,承诺更值得检验,应该优先考虑

只需在依赖项中包含
ngMock
,就可以为url创建一个假响应

请看下面的演示(不工作,所以需要检查问题所在)或

angular
.module('web.template',['ngMock'])
.controller('mainCtrl',mainCtrl)
.工厂(“测试服务”,测试服务);
testService.$inject=['$http'];
函数testService($http){
返回{
getTestDatas:函数(回调){
var data=$.param({/$.param用于JSFIDLE)
json:json.stringify({//json包装器,仅用于JSFIDLE
testParams:“测试”
}),
延误:1
});
返回$http.post('/echo/json/',data)
.成功(功能(响应){
控制台日志(响应);
回调?回调(响应):未定义;
});
},
};
};
函数MainCtrl($scope,testService){
var getDataCb=函数(响应){
$scope.data=响应;
};
getTestDatas(getDataCb);
}
MainCtrl.$inject=['$scope','testService'];
//规格代码
描述(“用于$http服务的测试套件”,函数(){
var$httpBackend、$rootScope、$testService;
//设置模块
在每个模块之前(模块('web.template');
每次之前(注入(函数($injector){
//设置模拟http服务响应
$httpBackend=$injector.get(“$httpBackend”);
//所有测试通用的后端定义
var fakedMainResponse={testParams:'testMocked'};
$httpBackend.when('POST','/echo/json/').response(fakedMainResponse);
//authRequestHandler=$httpBackend.when('GET','/echo/json/'))
//.respond({testParams:'testMocked'});
$testService=$injector.get('testService');
//获得作用域(即根作用域)
$rootScope=$injector.get(“$rootScope”);
//$controller服务用于创建控制器的实例
//变量$controller=$injector.get('$controlle