Skip to content
Snippets Groups Projects

Resolve "Borestop"

Merged Colin DAMON requested to merge 25-borestop into master
8 files
+ 101
1589
Compare changes
  • Side-by-side
  • Inline
Files
8
+ 58
0
import ProvidesCallback = jest.ProvidesCallback;
import DoneCallback = jest.DoneCallback;
import { waitFor } from './TimerUtils';
const runTest = (handler: ProvidesCallback) =>
new Promise((resolve, reject) => {
const doneCallback = (): DoneCallback => {
const callback: any = (err: any) => (err ? reject(err) : resolve());
callback.fail = () => {};
return callback;
};
const result = handler(doneCallback());
if (result && result.then) {
result.catch(reject).then(resolve);
} else {
resolve();
}
});
const waitBeforeRetry = (time: number) => waitFor(time);
const withRetriesIt = (name: string, fn: ProvidesCallback, maxTries: number, delay: number, timeout?: number) => {
it(
name,
async () => {
let latestError;
for (let retry = 1; retry <= maxTries; retry++) {
try {
await runTest(fn);
return;
} catch (error) {
latestError = error;
await waitBeforeRetry(delay);
}
}
throw latestError;
},
timeout
);
};
export interface RetryConfiguration {
maxTries: number;
delay: number;
}
export const TREEZOR_RETRIES: RetryConfiguration = { maxTries: 20, delay: 500 };
export interface WithRetries {
it: (name: string, fn: ProvidesCallback, timeout?: number) => void;
}
export const withRetries = (conf: RetryConfiguration): WithRetries => ({
it: (name: string, fn: ProvidesCallback, timeout?: number) => withRetriesIt(name, fn, conf.maxTries, conf.delay, timeout),
});
Loading