Skip to content

Instantly share code, notes, and snippets.

@rook2pawn
Last active June 25, 2020 01:18
Show Gist options
  • Save rook2pawn/71e3e35c8f9395cd8c9ec8f605db6ebb to your computer and use it in GitHub Desktop.
Save rook2pawn/71e3e35c8f9395cd8c9ec8f605db6ebb to your computer and use it in GitHub Desktop.
test integration
function testIntegration(executor, timeout) {
let timer;
const timeoutPromise = new Promise((resolve, reject) => {
timer = setTimeout(() => {
console.log("timing out");
screenshot();
reject("timeout");
}, timeout);
});
const testPromise = new Promise((resolve, reject) => {
return executor()
.then(resolve)
.catch(reject)
.then(() => {
console.log("cleanup: clearing timer");
clearTimeout(timer);
console.log("cleanup: closing pages");
// cleanup
});
});
return Promise.race([timeoutPromise, testPromise]);
}
const screenshot = async () => {
console.log("screenshot on timeout");
return Promise.resolve();
};
const stalledSelector = () => {
console.log("stalledSelector:start");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("stalledSelector:finish");
resolve();
//reject("stalledSelect failure");
}, 7000);
});
};
const normalSelector = () => {
console.log("normalSelector:start");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("normalSelector:finish");
//resolve();
reject("normal selector failed");
}, 2000);
});
};
// 1. executor can either
// a. return resolve / undefined
// b. return reject -> failure
// c. mysteriously hang -> failure + snapshot of PAGE
testIntegration(async () => {
console.log("testIntegration:executor:start");
//await stalledSelector();
await normalSelector();
}, 5000)
.then(() => {
console.log("testIntegration:executor:finished -> means jest Test passes");
})
.catch(e => {
console.log("testIntegration:caught", e);
console.log("-> means Jest test fails");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment