Newman运行Postman集合报CookieJar.getAll() requires a callback function如何解决
问题原因及解决方案
问题根源
Postman桌面端与Newman的pm.cookies接口实现存在版本差异:
- Postman桌面端已对
CookieJar.getAll()方法做了Promise适配,支持直接用await调用 - Newman依赖的底层运行库中
CookieJar.getAll()仅支持传入回调函数获取结果,不会返回Promise,你当前的await写法会直接触发类型错误,同时async函数内的异常没有捕获逻辑,最终抛出未处理的Promise拒绝报错。
修复方案
方案1:改用回调函数写法(兼容性最佳)
直接适配Newman的回调规则,同时通过done()标识异步测试完成,修改后的测试脚本如下:
pm.test("Get a test data", function () { const jsonData = pm.response.json(); pm.expect(jsonData.data.createTest.success).to.eql(true); }); pm.test("Test data cookies set", function (done) { const cookieJar = pm.cookies.jar(); const url = pm.environment.get("service-url"); cookieJar.getAll(url, function (error, cookies) { if (error) { done(error); return; } const cookieNames = cookies.map(cookie => cookie.name); pm.expect(cookieNames).to.include("test-token"); pm.expect(cookieNames).to.include("legacy-test-token"); done(); }); });
方案2:封装Promise保留async/await写法
如果不想调整原有异步逻辑,可以手动把回调方法包装成Promise:
pm.test("Get a test data", function () { const jsonData = pm.response.json(); pm.expect(jsonData.data.createTest.success).to.eql(true); }); pm.test("Test data cookies set", async function () { const cookieJar = pm.cookies.jar(); const url = pm.environment.get("service-url"); // 手动封装Promise适配回调API const cookies = await new Promise((resolve, reject) => { cookieJar.getAll(url, (error, cookies) => { if (error) return reject(error); resolve(cookies); }) }); const cookieNames = cookies.map(cookie => cookie.name); pm.expect(cookieNames).to.include("test-token"); pm.expect(cookieNames).to.include("legacy-test-token"); });
修改后重新执行newman run postman_collection.json -e environment.json即可正常运行。
内容的提问来源于stack exchange,提问作者RH-st
相关产品推荐
相关产品推荐

