2

$httpBackendhttp リクエストをモックするために使用するサービスの単体テストを作成しようとしています。今のところ、私は仕事をしようとして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依存関係を取得するために使用する

いいえ:

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