// Recursively evaluates generator values function customAsync(generatorFn) { const generator = generatorFn(); const resolve = (generatorResult) => { const noMoreIterations = generatorResult.done; if (noMoreIterations) { return Promise.resolve(generatorResult.value); } return Promise.resolve(generatorResult.value) .then((newValue) => resolve(generator.next(newValue))) .catch((error) => resolve(generator.throw(error))); }; return resolve(generator.next()); } describe('customAsync', () => { it('should await the values of the function', () => customAsync(function* () { const result = yield Promise.resolve('My API value'); expect(result).toBe('My API value'); })); });