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