2

我正在尝试为用于$httpBackend模拟 http 请求的服务编写单元测试。现在我只是想开始expectGET工作,但我收到以下错误:

TypeError: 'undefined' is not a function (evaluating 'encoder.encode.bind(encoder)')
    at FormEncoderService (/Users/photon/Development/3C/client/bower_components/stormpath-sdk-angularjs/dist/stormpath-sdk-angularjs.js:1473)
    at formEncoderServiceFactory (/Users/photon/Development/3C/client/bower_components/stormpath-sdk-angularjs/dist/stormpath-sdk-angularjs.js:1574)
    at invoke (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4476)
    at /Users/photon/Development/3C/client/bower_components/angular/angular.js:4293
    at getService (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4435)
    at invoke (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4467)
    at /Users/photon/Development/3C/client/bower_components/angular/angular.js:4293
    at getService (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4435)
    at invoke (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4467)
    at /Users/photon/Development/3C/client/bower_components/angular/angular.js:4297
    at forEach (/Users/photon/Development/3C/client/bower_components/angular/angular.js:336)
    at createInjector (/Users/photon/Development/3C/client/bower_components/angular/angular.js:4297)
    at workFn (/Users/photon/Development/3C/client/bower_components/angular-mocks/angular-mocks.js:2427)
    at /Users/photon/Development/3C/client/bower_components/angular-mocks/angular-mocks.js:2410
    at /Users/photon/Development/3C/client/test/spec/services/dataservice.js:17
TypeError: 'undefined' is not a function (evaluating '$httpBackend
      .expectGET('http:/localhost:3000/api/users')')
    at /Users/photon/Development/3C/client/test/spec/services/dataservice.js:28
TypeError: 'undefined' is not an object (evaluating '$httpBackend.verifyNoOutstandingExpectations')
    at /Users/photon/Development/3C/client/test/spec/services/dataservice.js:21

我尝试了各种注入 $httpBackend 的方法,包括

1.

'use strict';

describe('Service: dataService', function () {
  // instantiate service
  var dataService, $httpBackend, $q;

  // load the service's module
  beforeEach(function() {
    module('clientApp');
    module('ngMock');

    inject(function (_stormpath_, _dataService_, _$httpBackend_, _$q_) {
      $httpBackend = _$httpBackend_;
      $q = _$q_;
      dataService = _dataService_;
    });
  });

  afterEach(function () {
    $httpBackend.verifyNoOutstandingExpectation();
    $httpBackend.verifyNoOutstandingRequest();
  });

  it('GET /api/users when .getUsers()', function() {
    $httpBackend
      .expectGET('http:/localhost:3000/api/users')
      .respond(200);
    dataService.getUsers();
    $httpBackend.flush();
  });
});
  1. 不包括module('ngMock');
  2. 用于$injector获取依赖项

IE:

beforeEach(inject(function($injector) {
  $httpBackend = $injector.get('$httpBackend');
  $q = $injector.get('$q');
  dataService = $injector.get('dataService');
});

dataService是我要测试的服务。它包含使用 http GET 请求从后端检索数据的方法。

虽然stormpath-sdk-angular.js在堆栈跟踪中提到了,但我认为这不是问题,因为这个测试应该被隔离。顺便说一句,我很好奇它为什么在那里。引发错误的stormpath-sdk-angular.js代码是这样的:

this.$get = [
  'STORMPATH_CONFIG',
  function formEncoderServiceFactory(STORMPATH_CONFIG){

  function FormEncoderService(){
    var encoder = new UrlEncodedFormParser();
    this.encodeUrlForm = encoder.encode.bind(encoder);
    return this;
  }

  ...
4

0 回答 0