$ HttpBackend(AngularJS)出现意外请求错误

时间:2015-03-24 15:27:42

标签: angularjs unit-testing karma-jasmine httpbackend ngmock

我正在使用HttpBackend来模拟我的Angular应用程序正在进行的一些调用的一些Http响应。

但是,当我运行测试时,我收到错误“意外请求:[object Object] undefined”

我知道通常这个错误意味着您丢失或错误输入了应用程序发出的$ http请求之一,因此无法找到响应。但我的错误并不像其他通常所说的那样具体,比如“Unexpected Request:GET api / call”所以我不知道出了什么问题。

之前有没有人遇到过这个特定的错误?

示例代码

角度控制器:

app.controller( 'ctrl', 
   [ '$scope' , '$http' , '$location', function( $scope, $http, $location ) {
        $http.get(
            "/api/1.0/id/" + id, 
            {
                headers: getAuthHeaders()
            }
        ).success(function( data ){ //... })]
);
茉莉花测试:

it('should ...', function(){
  httpBackend.whenGET('/api/1.0/id/*').respond(200,{"test":"Test"});
  //...
});

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码并自己测试。我添加了一个设置ID的函数,但我认为你有类似的东西:

 //PRESET ID
 var id = 'deajedgwe1e213df';

        //FUNCTION TO CAPSULATE API CALL
        this.callApi = function () {
            http.get(
                "/api/1.0/id/" + id,
                {
                    //headers: getAuthHeaders()
                }
            ).success(function( data ){
                    console.log('success', data);
                }).error(function (err) {
                    console.log('error', err);
                });
        };

        //FUNCTION TO SET ID
        this.setId = function (ID) {
              id = ID;
        };

然后我复制了你的测试并将其修改为:

  it('should ...', function(){
      ctrl.setId('test123ID');

      httpBackend.expectGET('/api/1.0/id/test123ID').respond(200,{"test":"Test"});

      ctrl.callApi();

      httpBackend.flush();
      httpBackend.verifyNoOutstandingExpectation();
      httpBackend.verifyNoOutstandingRequest();
  });
这是有效的。另外你可以做到这一点:

   it('should ...', function(){

      httpBackend.expectGET(/api/i).respond(200,{"test":"Test"});

      ctrl.callApi();

      httpBackend.flush();
      httpBackend.verifyNoOutstandingExpectation();
      httpBackend.verifyNoOutstandingRequest();
  });

这也有效,但它只验证,/ api已被调用...如果是这样,我不想要测试。

我认为主要问题是api-call上的星号表示法。尝试像我一样修改你的代码。如果这不应该有帮助,你应该调用你的标题函数。

祝你好运。