3

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

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

我知道通常此错误意味着您丢失或输入了应用程序发出的 $http 请求之一,因此无法找到响应。但是我的错误并不像其他通常说的“意外请求: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"});
  //...
});
4

1 回答 1

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 中的星号符号。尝试像我一样修改您的代码。如果这没有帮助,您应该调用您的标头函数。

祝你好运。

于 2015-12-15T08:13:11.283 回答