意外请求:在 angular 茉莉花测试中获取
Unexpected request: GET in angular jasmine testing
在控制器测试期间,我面临 错误:意外请求:GET /api/initData,预期 GET /api/empData。到目前为止,我有两个 http 调用在我的 controller.I 中有以下问题。
1)在为两个测试用例提供 $httpBackend.expectGET 之后,否则我得到上面的 error.Here 我想测试一个 http打电话
2) 在 afterEach 块中,我必须再次执行 $httpBackend.expectGET 否则会抛出相同的错误。
下面是该控制器的代码片段
describe('Manager Controller',function(){
var $scope,
$rootScope,
$injector,
$controller,
$httpBackend,
mockManagerData,
managerController;
beforeEach(module('APP'));
beforeEach(inject(function(_$rootScope_,_$injector_,_$controller_,_$httpBackend_){
$rootScope = _$rootScope_;
$injector = _$injector_;
$controller = _$controller_;
$scope = $rootScope.$new();
$httpBackend = _$httpBackend_;
mockManagerData = {
"manager": [
{
"id": 1,
"name": "Sam",
"department": "IT",
"employee": [
{
"id": 1,
"name": "Mak",
"profile": "developer"
},
{
"id": 1,
"name": "John",
"profile": "QA"
},
{
"id": 1,
"name": "Tom",
"profile": "Dba"
}
]
}
]
}
managerController = $controller('managerCtrl',{
$scope:$scope
});
}));
it('should get manager details',function(){
$httpBackend.expectGET('/api/initData').respond(200,'');
$httpBackend.expectGET('/api/empData').respond(200,mockManagerData);
$scope.getManagerDetails();//click event in controller
$httpBackend.flush();
expect(true).toBe(true);
});
afterEach(function() {
$httpBackend.expectGET('/api/initData').respond(200,'');
$httpBackend.expectGET('/api/empData').respond(200,mockManagerData);
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
})
下面是我的控制器逻辑
(function(angular){
'use strict'
angular.module('APP').controller('managerCtrl',managerController);
managerController.$inject=['$scope','$http'];
function managerController($scope,$http){
$scope.getManagerDetails = function(){
$http({
method: 'GET',
url: '/api/empData'
}).then(function successCallback(response) {
//some login
}, function errorCallback(response) {
});
}
$http({
method: 'GET',
url: '/api/initData'
}).then(function successCallback(response) {
//some logic
}, function errorCallback(response) {
});
}
})(window.angular)
上面的代码工作正常,但是当我删除任何 http 调用时,我得到了上面提到的错误。请一些help.Thanks
您可以只测试您的 api/initData
或两者 requests.The 无论您是否调用 clickhandler,控制器中的第二次调用都将始终进行。您可以将 expectGet 移动到 beforeEach 函数并将其更改为 whenGet。然后,您可以在第一个测试中仅对点击功能进行单元测试。
有关 httpBackend 的文档以及 whenGet 和 expectGet 之间的区别,请参阅 this.
在控制器测试期间,我面临 错误:意外请求:GET /api/initData,预期 GET /api/empData。到目前为止,我有两个 http 调用在我的 controller.I 中有以下问题。
1)在为两个测试用例提供 $httpBackend.expectGET 之后,否则我得到上面的 error.Here 我想测试一个 http打电话
2) 在 afterEach 块中,我必须再次执行 $httpBackend.expectGET 否则会抛出相同的错误。
下面是该控制器的代码片段
describe('Manager Controller',function(){
var $scope,
$rootScope,
$injector,
$controller,
$httpBackend,
mockManagerData,
managerController;
beforeEach(module('APP'));
beforeEach(inject(function(_$rootScope_,_$injector_,_$controller_,_$httpBackend_){
$rootScope = _$rootScope_;
$injector = _$injector_;
$controller = _$controller_;
$scope = $rootScope.$new();
$httpBackend = _$httpBackend_;
mockManagerData = {
"manager": [
{
"id": 1,
"name": "Sam",
"department": "IT",
"employee": [
{
"id": 1,
"name": "Mak",
"profile": "developer"
},
{
"id": 1,
"name": "John",
"profile": "QA"
},
{
"id": 1,
"name": "Tom",
"profile": "Dba"
}
]
}
]
}
managerController = $controller('managerCtrl',{
$scope:$scope
});
}));
it('should get manager details',function(){
$httpBackend.expectGET('/api/initData').respond(200,'');
$httpBackend.expectGET('/api/empData').respond(200,mockManagerData);
$scope.getManagerDetails();//click event in controller
$httpBackend.flush();
expect(true).toBe(true);
});
afterEach(function() {
$httpBackend.expectGET('/api/initData').respond(200,'');
$httpBackend.expectGET('/api/empData').respond(200,mockManagerData);
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
})
下面是我的控制器逻辑
(function(angular){
'use strict'
angular.module('APP').controller('managerCtrl',managerController);
managerController.$inject=['$scope','$http'];
function managerController($scope,$http){
$scope.getManagerDetails = function(){
$http({
method: 'GET',
url: '/api/empData'
}).then(function successCallback(response) {
//some login
}, function errorCallback(response) {
});
}
$http({
method: 'GET',
url: '/api/initData'
}).then(function successCallback(response) {
//some logic
}, function errorCallback(response) {
});
}
})(window.angular)
上面的代码工作正常,但是当我删除任何 http 调用时,我得到了上面提到的错误。请一些help.Thanks
您可以只测试您的 api/initData
或两者 requests.The 无论您是否调用 clickhandler,控制器中的第二次调用都将始终进行。您可以将 expectGet 移动到 beforeEach 函数并将其更改为 whenGet。然后,您可以在第一个测试中仅对点击功能进行单元测试。
有关 httpBackend 的文档以及 whenGet 和 expectGet 之间的区别,请参阅 this.