$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();
});
});
- 含まない
module('ngMock');
$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;
}
...