Wie benutze ich jasmine.clock setTimeout Mock innerhalb verschachtelter Versprechen? (Ergebnis: Error: jasmine.DEFAULT_TIMEOUT_INTERVAL
)Wie verwende ich Jasmine clock (setTimeout) in verschachtelten Versprechen, wenn die Bestellung wichtig ist? (jasmine.DEFAULT_TIMEOUT_INTERVAL error)
Reihenfolge ist hier entscheidend.
Ich muss verschachtelte Versprechen testen, die SetTimeout innerhalb haben muss - Reihenfolge Angelegenheiten. Ich weiß, dass then
Art von process.nextTick
(oder setImmediate
) und es geht über die aktuelle Ereignisschleife (die das Kernproblem hier ist), aber dies knowledge
löst nicht das Problem :)
Ich weiß, dass ich nach innen setzen kann jasmine.clock().tick()
geschachteltes Versprechen, aber das ist sinnlos, weil ich die richtige Reihenfolge in einigen mit Ereignissen zusammenhängenden Bibliotheken teste.
Wie testet man so etwas in Jasmin? irgendwelche Ideen?
it("should run setTimeout mock inside chained promises",(done)=>{
jasmine.clock().install();
let realOrder = [];
let ok1=new Promise((resolve,reject)=>{
resolve("ok");
}).then((ok)=>{// this is future - second level
let p=new Promise((resolve,reject)=>{
setTimeout(()=>{ // not fired up due to 'then' method
realOrder.push("1");
resolve("1");
},100);
});
//jasmine.clock().tick(101); //<- order is crucial here so I can't do that
return p;
});
let ok2=new Promise((resolve,reject)=>{
resolve("ok");
}).then((ok)=>{ // second level
let p=new Promise((resolve,reject)=>{
setTimeout(()=>{ // not fired up due to 'then' method
realOrder.push("2");
resolve("2");
},50);
});
//jasmine.clock().tick(51); //<- order is crucial here so I can't do that
return p;
});
jasmine.clock().tick(151);// we must go outside nested promise - we dont need to run tick inplace because order will change
Promise.all([ok1,ok2]).then((results)=>{
expect(results).toEqual(["1","2"]);
expect(realOrder).toEqual(["2","1"]);
done();
});
});