Тестирование базового углового сервиса
Итак, это моя установка:
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/