This code taken from redux-sagatesting-utils module. Just
cloneableGeneratorfunction without any other dependencies.
npm install @wmakeev/cloneable-generator
Takes a generator function (function*) and returns a generator function. All generators instanciated from this function will be cloneable. For testing purpose only.
This is useful when you want to test a different branch of generator function without having to replay the steps that lead to it.
import{cloneableGenerator}from'@wmakeev/cloneable-generator';function*oddOrEven(){// some stuff are done hereyield1;yield2;yield3;constuserInput=yield'enter a number';if(userInput%2===0){yield'even';}else{yield'odd'}}test('my oddOrEven',assert=>{constdata={};data.gen=cloneableGenerator(oddOrEven)();assert.equal(data.gen.next().value,1,'it should yield 1');assert.equal(data.gen.next().value,2,'it should yield 2');assert.equal(data.gen.next().value,3,'it should yield 3');assert.equal(data.gen.next().value,'enter a number','it should ask for a number');assert.test('even number is given',a=>{// we make a clone of the generator before giving the number;data.clone=data.gen.clone();a.equal(data.gen.next(2).value,'even','it should yield "even"');a.equal(data.gen.next().done,true,'it should be done');a.end();});assert.test('odd number is given',a=>{a.equal(data.clone.next(1).value,'odd','it should yield "odd"');a.equal(data.clone.next().done,true,'it should be done');a.end();});assert.end();});