Код обложки с обещанием с блочным тестом

У меня есть логика в моем обещании. Можно ли покрыть эту логику модульными испытаниями? Например, я запускаю событие Google Analytics внутри этого обещания в своем контроллере и хочу сделать что-то вроде expect($analytics.eventTrack).toHaveBeenCalledWith(...).

0
задан 13 August 2018 в 15:42

1 ответ

Наконец, способ охватить код, который находится внутри обещания, может быть следующим: предположим, что при сохранении некоторых данных мы запускаем событие GA внутри нашего обещания, в котором говорится, что данные были сохранены. У нас есть служба VoteService, которая имеет метод saveVote. Этот метод делает запрос на сервер и возвращает обещание. В рамках нашего обещания мы запускаем событие GA (когда сохранение было успешно выполнено). Чтобы написать тест для этого, нам нужно в beforeEach:

создать обещание saveVoteDeferrer = $q.defer(); разрешить обещание с помощью необходимого метода службы spyOn данных spyOn(VoteServiceMock,'saveVote') .and.returnValue(saveVoteDeferrer.promise);

И затем в it ]:

создать обещание saveVoteDeferrer = $q.defer(); проверить, было ли событие GA возбуждено внутри нашего тела обещания expect($analytics.eventTrack) .toHaveBeenCalledWith('NewVoteAdded', {});

Пример:

]

voteController.js

var vm = this;
vm.addVote = function(){
//some logic goes here
VoteService.saveVote(vote)
  .then(function(result){
    //some logic goes here
    $analytics.eventTrack('NewVoteAdded', {});
  });
}

voteController.js

return function(){
  this.saveVote = function($http){
    // some logic goes here
    return $http.post(/*needed parameters*/);
  }
}

vote.spec.js

describe('some text', function(){
 beforeEach(function () { 
  // inject what you need
  // mock VoteService service 
  // inject voteController controller
  var saveVoteDeferrer = $q.defer();
  spyOn($analytics,'eventTrack');
  saveVoteDeferrer.resolve({ data: { } });
  spyOn(VoteServiceMock,'saveVote')
     .and.returnValue(saveVoteDeferrer.promise); 

  it('fire GA event when the vote is saved', function(){
    $ctrl.addVote();
    expect($analytics.eventTrack)
       .toHaveBeenCalledWith('NewVoteAdded', {});  });
  });
});
0
ответ дан 15 August 2018 в 16:59

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

Похожие вопросы: