Fel*_*ets 2 javascript testing asynchronous promise postman
我需要在Postman测试中使用一些异步代码.
由于这是一个复杂的场景,我使用以下代码在一个非常简单的测试中重现了这个场景:
let promiseNumber = 0;
function resolvedPromise() {
return new Promise((resolve, reject) => {
pm.sendRequest('https://postman-echo.com/get', (err, res) => {
if (err) {
console.log(err);
reject();
} else {
console.log(`Resolved promise ${++promiseNumber}`);
resolve();
}
});
});
}
resolvedPromise()
.then(resolvedPromise)
.then(resolvedPromise)
.catch(err => console.log(err));
Run Code Online (Sandbox Code Playgroud)
控制台上的预期结果是:
Resolved promise 1
Resolved promise 2
Resolved promise 3
Run Code Online (Sandbox Code Playgroud)
但我得到了:
Resolved promise 1
Run Code Online (Sandbox Code Playgroud)
有没有办法在Postman上提供Promise或异步代码?
我做了一些测试,并意识到在使用pm.sendRequest后它总是停止工作.如果我尝试解决Promise它的工作原理.
似乎是一个看着这个线程的已知错误.
它的解决方法只是在处理代码时保持打开超时.只需确保所有可能的路径都清除超时或呼叫将挂起25天
// This timeout ensure that postman will not close the connection before completing async tasks.
// - it must be cleared once all tasks are completed or it will hang
const interval = setTimeout(() => {}, Number.MAX_SAFE_INTEGER);
let promiseNumber = 0;
function resolvedPromise() {
return new Promise((resolve, reject) => {
pm.sendRequest('https://postman-echo.com/get', (err, res) => {
if (err) {
console.log(err);
reject();
} else {
console.log(`Resolved promise ${++promiseNumber}`);
resolve();
}
});
});
}
resolvedPromise()
.then(resolvedPromise)
.then(resolvedPromise)
.then(() => clearTimeout(interval))
.catch(err => {
console.log(err);
clearTimeout(interval);
});
Run Code Online (Sandbox Code Playgroud)
现在它打印出预期的结果:
Resolved promise 1
Resolved promise 2
Resolved promise 3
Run Code Online (Sandbox Code Playgroud)