Тестирование базового углового сервиса

Итак, это моя установка:

var app = angular.module("KamajiDash", ['ngResource','ui.bootstrap'.. 'elasticsearch']);

app.service("elbService",function($http) {
  this.remove_instance =  function(elb_id, instance_id) {
      $http.delete("/api/v1/amazon_elbs/"+elb_id+"/remove_instance/"+instance_id).success(function(data){
        return data;
      }).error(function(error){
        return error;
    }); 
  }
});

Вот мой тестовый файл с жасмином:

(function(){

  var elbService, httpBackend;

  describe ('elbService', function(){

    beforeEach(function(){
      module('KamajiDash');

      inject(function(_elbService_,$httpBackend){
        httpBackend = $httpBackend;
        elbService = _elbService_;
      }); 
    }); 

    describe("#remove_instances", function(){

      beforeEach(function(){
        httpBackend.when("DELETE","/api/v1/amazon_elbs/1/remove_instance/1").respond("success")
      })  

      it("will provide a method called remove instances, that take two args, that calls $http.delete with the correct url", function(){
        elbService.remove_instance(1,1).then(function(response){
          expect(response).toEqual("success");
        });  
        httpBackend.flush();
      });  

    })  

  })  

})();

Поэтому, когда я запускаю этот elbService.remove_instance(1,1), возвращается неопределенное. Есть идеи почему?

1 ответ

Решение

Как уже упоминалось в @tymeJV, вам также необходимо вернуть объект $http или установить переменную области видимости, равную ответу. Проблема в том, что вы возвращаетесь только на один уровень, а не на два:

a = function () {
  function() { return 1; }() // 1 is visible here
}() // ... but not here

Смотрите эту скрипку: http://jsfiddle.net/v80dLmwz/

Другие вопросы по тегам