jasmine.clockの使用方法ネストされた約束の中でsetTimeout模擬? (結果:Error: jasmine.DEFAULT_TIMEOUT_INTERVAL
)注文が問題になる場合、ネストされた約束でジャスミンクロック(setTimeout)を使用する方法? (jasmine.DEFAULT_TIMEOUT_INTERVALエラー)
ここでは重要です。
setTimeoutの内部順序の問題が必要なネストされた約束をテストする必要があります。 私はthen
がprocess.nextTick
(またはsetImmediate
)の一種であることを知って、それは(ここではコアの問題である)現在のイベントループを超えたが、これknowledge
で問題が解決しない:)
私は内部jasmine.clock().tick()
を置くことができることを知っていますネストされた約束ですが、これは意味がありません。なぜなら、私はいくつかのイベント関連のlibで適切な順序をテストしているからです。
ジャスミンでこれをテストするには?何か案は?
同じ問題に来た人のために[OK]を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();
});
});