jasmine使用時、$httpBackendのrespondで応答を設定できない
以下のコードはAngular.jsのサービスとkarma+jasmineでテストするためのテストのペアを想定しています。
myService.get()
が意図した値を返すかテストしています。
この時、$httpBackend
を使ってサーバーが特定の値(この場合'hello')を返したいのですが、
expect(data).toBe('hello');
を通らず全てパスしてしまいます。
また失敗時にconsole.error(err)
で出力されるはずのログも出力されていません。
実際にアプリを立ち上げてみるとmyServiceは意図した通りに動作しているため、$httpBackend
の設定の仕方がおかしいのかと推測しています。
原因の見当がつく方、ご教授ください。
サービス
angular.module('historyCompositionApp')
.service('myService', ['$http', '$q', function($http, $q) {
this.get = function() {
var d = $q.defer();
$http({
method: 'GET',
url: 'testData.json'
})
.success(function(data) {
//応答データ変換処理が入る
d.resolve(data);
})
.error(function(err) {
d.reject(err);
});
return d.promise;
};
}]);
テスト
describe('Service: myService', function() {
var $httpBackend;
// load the service's module
beforeEach(module('myApp'));
// instantiate service
var myService;
beforeEach(inject(function(_myService_, _$httpBackend_) {
myService = _myService_;
$httpBackend = _$httpBackend_;
}));
it('should say hello', function() {
$httpBackend.expect('GET', 'testData.json').respond('hello');
var promise = myService.get()
promise.then(function(data) {
console.log(data);
expect(data).toBe('hello');
}, function(err) {
console.error(err)
});
});
});