Тестирование обещаний в мокко и чае - PullRequest
0 голосов
/ 30 августа 2018
export class YoutubeService {
  getTrendingVideos(country) {
    var params = {
      part: 'snippet',
      chart: 'mostPopular',
      regionCode: country, // should be replaced with country code from countryList
      maxResults: '24',
      key: config.youtubeApi.key
    };
    let result = [];
    let promises = [];
    return axios.get('/', {params}).then(function(res){
      result = res.data.items;
      for (var i = 0; i < result.length; i++) {
          result[i] = {
              id: result[i].id,
              title: result[i].snippet.title,
              thumbnail: result[i].snippet.thumbnails.high.url,
              publishedAt: moment(result[i].snippet.publishedAt).fromNow()
          };
          promises.push(YoutubeService.getVideoDetails(result[i]));
      }
      return Promise.all(promises);
    });
  }

  static getVideoDetails(video) {
    let params = {
      part: 'statistics',
      id: video.id,
      key: config.youtubeApi.key
    };

    return axios.get('/', {params}).then(function(res) {
      let result = res.data;
      video.viewCount = result['items'][0].statistics.viewCount;
      video.likeCount = result['items'][0].statistics.likeCount;
      return video;
    });
  }
}

Я новичок в использовании мокко и чая для тестирования, особенно обещаний. Как я могу проверить эти две функции, используя утверждения Chai. Как я должен юнит тестировать эти две функции Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Взгляните на библиотеку Chai as Promised , которая предоставляет цепочку eventually, которая помогает удалить некоторые шаблоны для получения асинхронного разрешения:

describe('YoutubeService.getTrendingVideos', function() {
  it('should resolve to expectedResult', function() {
    const params = '';
    const expectedResult = [];
    return getTrendingVideos(params).should.eventually.equal(expectedResult);
  });
});
0 голосов
/ 30 августа 2018

Вы бы отправили функцию в it, и функция получит функцию done для вызова после завершения разрешения.

it('does resolve later', function(done) {
    asyncCall().then(()=>{ done(); }
})


it('does resolve later', async function(done) {
    await asyncCall()
    done()
})

Вы также можете вернуть обещание.

it('does resolve later', function () {
    return asyncCall()
})
...