Javascript 如何为回调函数作为参数并返回承诺的函数编写mocha测试

Javascript 如何为回调函数作为参数并返回承诺的函数编写mocha测试,javascript,node.js,promise,async-await,mocha.js,Javascript,Node.js,Promise,Async Await,Mocha.js,我试图用回调函数作为参数,对下面的函数编写一个单元测试,它返回一个承诺。控件在执行单元测试时无法进入回调方法 function addToCache (cacheProxy, policy, cacheObj, req) { const logger = global.logger; return new Promise(function (resolve, reject) { cacheProxy.put(policy, req, cacheObj, function (err

我试图用回调函数作为参数,对下面的函数编写一个单元测试,它返回一个承诺。控件在执行单元测试时无法进入回调方法

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

我希望有人能帮助我。

您正在使用
异步功能作为您的摩卡测试。
使用
async
时,不需要使用
使用Promise工作流。然后

async
函数本身会自动返回一个承诺

相反,您必须等待函数中的承诺结果:

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

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

您正在使用
异步功能作为您的摩卡测试。
使用
async
时,不需要使用
使用Promise工作流。然后

async
函数本身会自动返回一个承诺

相反,您必须等待函数中的承诺结果:

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)
   })
})
混合使用这两种概念很可能不会产生预期的结果