Jest Test Callback обещание - PullRequest
       1

Jest Test Callback обещание

0 голосов
/ 11 февраля 2019

Я хочу проверить следующую функцию storeCache.Важная часть, которую я хочу протестировать, - это функция обратного вызова в Meteor.call(...).

. Я хочу смоделировать Meteor.call(...), но она обернута Обещанием, а сам обратный вызов также основан на Оберточном Обещании.

 export async function storeCache(cache) {
    // do something
    return new Promise((resolve, reject) => {
        Meteor.call("transferCache", cache, async (error, result) => {
        if (error) {
            reject(error);
        } else {
            try {
                const result = await persistCache();
                resolve(result)
            } catch (e) {
                reject(e);
            }
        }
    });
});

}

Каков наилучший способ проверки определенной функции обратного вызова с помощью Jest?Или есть лучший способ структурировать код, чтобы его было проще тестировать?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Итак, вот мое решение: Meteor.call с его обещанием находится в отдельной функции под названием helper.transferData().Это избавило от необходимости обратного вызова.Я могу поставить логику прямо в storeCache() и макет helper.transferData().

export async function transferData(cache) {
   return new Promise((resolve, reject) => {
      Meteor.call("transferCache", cache, async (error, result) => {
         if (error) {
            reject(error);
         } else {
            resolve(result);
         }
      });
   });
}


export async function storeCache(cache) {
   // do something
   try{
      // call meteor method
      const transferResult = await helper.transferData(cache);
      // callback logic
      const result = await persistCache();
      // return Promise for compability reasons
      return Promise.Resolve(result);
   } catch (e) {
      return Promise.Reject(result);
   }
0 голосов
/ 11 февраля 2019

это должно быть так же просто, как

// in your imports
import { Meteor } from 'meteor/meteor'
jest.mock('meteor/meteor', () => {
  return {
    Meteor: {
      call: jest.fn()
    }
  }
})

//in your test case
Meteor.call.mockImplementation((eventName, cache, callback) => {
// your assertions
// you can call the callback here
// you probably want to mock persistCache too
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...