【问题标题】:How to write mocha test for a function with callback function as argument and returns a promise如何为带有回调函数作为参数的函数编写摩卡测试并返回一个承诺
【发布时间】:2020-07-17 23:00:59
【问题描述】:

我正在尝试为以下函数编写一个单元测试,其中回调函数作为参数,它返回一个承诺。执行单元测试时控件无法进入回调方法

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);
    });
  });
});

我希望有人可以帮助我。

【问题讨论】:

    标签: javascript node.js promise async-await mocha.js


    【解决方案1】:

    您正在使用 async 函数作为 mocha 测试。
    使用 async 时,您无需使用使用 .then 的 Promise 工作流程。
    async 函数本身会自动返回一个 Promise。

    相反,您必须 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)
       })
    })
    

    混合使用这两个概念很可能不会产生预期的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多