Как написать тест Мокко для функции с функцией обратного вызова в качестве аргумента и вернуть обещание - PullRequest
1 голос
/ 06 апреля 2020

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

function addToCache (cacheProxy, policy, cacheObj, req) {
  const logger = global.logger;
  return new Promise(function (resolve, reject) {
    cacheProxy.put(policy, req, cacheObj, function (error, response) {
      if (error) {
        console.error("some error occurred while adding object");
        reject(error);
      } else {
        if (response && response.statusCode) {
          console.log(`got a valid response with responseCode ${response.statusCode}`);
          resolve(response);
        } else {
          console.error("status code missing in response");
          reject(response);
        }
      }
    });
  });
}

Вот модульный тест, который я написал, но элемент управления не входит в метод анонимного обратного вызова, определенный в аргументе метода cacheProxy.put.

describe("mediator tests", function () {
  it("addToCache", async () => {
    const cacheProxy = {
      put: function (policy, req, cacheObj, callback) {}
    };
    medicator.addToCache(cacheProxy, "dummy_policy", "123456789012", {}).then((result) => {
      expect(result.statusCode).to.equal(200);
    });
  });
});

Я надеюсь, что кто-то может мне помочь.

1 Ответ

0 голосов
/ 06 апреля 2020

Вы используете функцию async в качестве теста мокко.
При использовании async вам не нужно использовать рабочий процесс Promise, используя .then.
A async Функция сама возвращает Обещаю автоматически.

Вместо этого вам необходимо await результат Promise внутри вашей функции:

describe("mediator tests", function () {
   it("addToCache", async () => {
      const cacheProxy = {
         put: function (policy, req, cacheObj, callback) {}
      }
      const result = await medicator.addToCache(cacheProxy, "dummy_policy", "123456789012", {})
      expect(result.statusCode).to.equal(200)
   })
})

Сочетание обеих концепций, скорее всего, не даст ожидаемого результата.

...