意外请求:在 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.