2016-07-13 5 views
0

Я оказался в небольшом обратном обращении и испытал трудности с тестированием. Я надеюсь, что, возможно, некоторые из вас, ребята могли бы помочь мне, чтобы понять этоОбезвреживание с угловым обслуживанием

У меня есть 2 услуги и моя проблема с функцией fooService.getModel

app.service('fooService', function($q, barService){ 
    return { 
    getModel: function(){ 
     var deferred = $q.defer(); 
     barService.get().then(function(response){ 
     //my bareService mock allow me to reach up to this point 
     var result = {}; 
     //some processing logic (if, else, etc) 
     console.log('resolve result') // I totally see this log 
     deferred.resolve(result); //this is what i want to test 
     }); 
     return deferred.promise; 
    }, 
    process: function(){ 
     this.getModel().then(function(result){ 
     if(result.success){ 
      barService.post().then(function(){ 
       //whatever i dont care 
      }) 
     } 
     }); 
    } 
    } 
}); 

и barService, которые содержат 2 метода (получить и хранить) в основном $ http звонки.
для обслуживания бара У меня нет проблем с тестированием, потому что логика изолирована Я просто притворяюсь над вызовами $ httpBackend с разными ответами.

проблема, которую я обнаружил, когда хочу проверить возвращаемый объект результата в функции getModel.

мой тест что-то вроде

it('should test the returning model', inject(function(fooService){ 
    barService.get.and.returnValue({then: function(successCallback){ 
     successCallback({status:204, data: {}}); 
    }}); 

    var result; 
    fooService.getModel().then(function(response){ 
     console.log('unit test then') // never gets in here 
     result = response; 
    }); 

    //or anything related to the result object 
    expect(result).toEqual(mockedModel); 
    expect(result.success).toBeTruthy() 
}) 

то, что я видел в том, что, если моя функция getModel будет выполнять HTTP-называть себя, я могу оценить результат моего модульного тестирования.

что-то вроде

getModel: function() { 
    var deferred = $q.defer(); 

    $http.get(url).then(function (response) { 
     deferred.resolve(response); 
    }) 
    .catch(function (response) { 
     deferred.reject(response); 
    }); 

    return deferred.promise; 
} 

я бы определенно люблю извлекать функциональность моей barService к моему fooService, но это весьма вероятно, что rehusable почему я извлеченный в отдельную службу.

У вас есть представление, как я могу исправить свой модульный тест, чтобы оценить ответ на результат?

я надеюсь, что его четкие спасибо за помощь, ребята

ответ

0

фигу обнаружил, что я даже это услуга, мне нужно сделать $ scope.digest в моем тестовом модуле.

спасибо!

Смежные вопросы