类型错误:parsed 在 angularjs 服务单元测试中未定义

TypeError: parsed is undefined on angularjs service unit test

本文关键字:服务 单元测试 未定义 angularjs 错误 parsed 类型      更新时间:2023-09-26

我正在尝试为使用$http的服务进行单元测试。我正在使用茉莉花,但不断收到此错误:

类型错误:解析在角度中未定义.js(第 13737 行)

这是我的服务的样子:

angular.module('myapp.services', [])
.factory('inviteService', ['$rootScope', '$http', function($rootScope, $http) {
    var inviteService = {
        token: '',
        getInvite: function(callback, errorCallback) {
            $http.get('/invites/' + this.token + '/get-invite')
            .success(function(data) {
                callback(data);
            })
            .error(function(data, status, headers, config) {
                errorCallback(status);
            });
        }
    };
    return inviteService;
}]);

这是我的测试的样子:

describe ('Invite Service', function () {
  var $httpBackend, inviteService, authRequestHandler;
  var token = '1123581321';
  beforeEach(module('myapp.services'));
  beforeEach(inject(function ($injector) {
    $httpBackend = $injector.get('$httpBackend');
    authRequestHandler = $httpBackend.when('/invites/' + token + '/get-invite').respond({userId: 'userX'}, {'A-Token': 'xxx'});
    inviteService = $injector.get('inviteService');
  }));
  afterEach (function () {
    $httpBackend.verifyNoOutstandingExpectation ();
    $httpBackend.verifyNoOutstandingRequest ();
  });
  describe ('getInvite', function () {
    beforeEach(function () {
      inviteService.token = token;
    });
    it ('should return the invite', function () {
      $httpBackend.expectGET('/invites/' + token + '/get-invite');
      inviteService.getInvite();
      $httpBackend.flush();
    });
  });
});
我对基于 angularjs

的应用程序进行单元测试很陌生,我在 angularjs 文档中使用了该示例

https://docs.angularjs.org/api/ngMock/service/$httpBackend

不确定我可能错过了什么,我已经尝试了不同的事情,但我总是得到同样的错误,任何帮助将不胜感激。

parsed变量是相关服务的 URL。undefined的原因如下:

  • 网址格式不正确
  • 不调用 $http.get
  • 未定义token
  • sucesserror回调没有data
  • .respond不被调用
  • .respond不包含响应对象作为参数

例如:

 describe('simple test', test);
 function test()
   {
   it('should call inviteService and pass mock data', foo);
   function foo() 
     {
     module('myapp.services');
     inject(myServiceTest);
     function myServiceTest(inviteService, $httpBackend)
       {
       $httpBackend.expect('GET', /.*/).respond(200, 'bar');
       function callback(){};
       inviteService.getInvite.token = '1123581321';
       inviteService.getInvite(callback, callback);
       $httpBackend.flush();
       expect(callback).toHaveBeenCalledOnce();
       }
     }
   }

引用

  • AngularJS 源代码:angular-mocksSpec.js - "当只有解析的主体与预期的主体对象不同时,应该抛出异常"

  • AngularJS source: urlUtils.js

  • AngularJS来源:urlUtilsSpec.js