2016-12-16 8 views
0

私はジャスミン1.3を使用しているジャスミンノード1.14.5を使用していますが、プロンプトで正しく動作するためにはruns/waitForの問題が発生しています。ジャスミン1.3でラン/ウェイトフォース後に約束を完了

特定のテストでは、特定の状態が起こるのを待つためにruns/waitForに連絡したいと思います。発生すると、私が返すプロミスを実行します。しかし、function(success, fail)パラメータで渡すPromiseを構築しようとすると、runs/waitForのコードは呼び出されません。しかし、プロミスが直接解決されれば、それは機能します。前者のオプションはうまくいかないという考えはありますか?

いくつかの例を与えることを、次のように正常に動作します:

it("should support async execution of test preparation and expectations", function(done) { 
    var p = Promise.resolve("boo") 
     .then(function() { 
     var p2 = Promise.resolve("whatever"); 

     runs(function() { 
      flag = false; 
      value = 0; 
      intId = setInterval(function() { 
      console.log(value); 
      if (++value == 3) { clearInterval(intId); flag = true; } 
      }, 500); 
     }); 

     waitsFor(function() { 
      return flag; 
     }, "The Value should be incremented", 5000); 

     runs(function() { 
      expect(value).toEqual(3); 
     }); 

     return p2; 
     }); 
    p.then(function() { 
     done(); 
    }).catch(function(err) { 
     done(err); 
    }); 
    }); 

しかし、その一方で、これは動作しませんruns/waitsForが問題なく呼ばれているがために、コールバックは内部のない操作を行います。

it("should support async execution of test preparation and expectations", function(done) { 
    var p = Promise.resolve("boo") 
     .then(function() { 
     return new Promise(function (fulfil, reject) { 
      runs(function() { 
      flag = false; 
      value = 0; 
      intId = setInterval(function() { 
       console.log(value); 
       if (++value == 3) { 
       clearInterval(intId); 
       flag = true; 
       } 
      }, 500); 
      }); 

      waitsFor(function() { 
      return flag; 
      }, "The Value should be incremented", 5000); 

      runs(function() { 
      expect(value).toEqual(3); 
      fulfil(); 
      }); 
     }); 
     }); 
    p.then(function() { 
     done(); 
    }).catch(function(err) { 
     done(err); 
    }); 
    }); 

私はまた、オフチャンスで次のことを試しましたが、どちらもうまく動作しません。前の例と同じように動作します。

it("should support async execution of test preparation and expectations", function(done) { 
    var p = Promise.resolve("boo") 
     .then(function() { 
     var outerFulfil; 
     var outerReject; 
     var p2 = new Promise(function(fulfil, reject) { 
      outerFulfil = fulfil; 
      outerReject = reject; 
     }); 

     runs(function() { 
      flag = false; 
      value = 0; 
      intId = setInterval(function() { 
      console.log(value); 
      if (++value == 3) { clearInterval(intId); flag = true; } 
      }, 500); 
     }); 

     waitsFor(function() { 
      return flag; 
     }, "The Value should be incremented", 5000); 

     runs(function() { 
      expect(value).toEqual(3); 
      outerFulfil(); 
     }); 

     return p2; 
     }); 
    p.then(function() { 
     done(); 
    }).catch(function(err) { 
     done(err); 
    }); 
    }); 

どのように解決するか考えてみませんか?最初の例は動作しますが、私が望むように振る舞いません。なぜなら、waitsForの後のアサーションが実行されたら、約束が成就してほしいからです。

乾杯、 ギャルダー

答えて

0

私は、例えば、完全に実行/ waitsForを捨ててしまって、代わりに時間ベースの再帰的な約束ループを行います

opは、プロミスを返す操作です。

例えば、私は、ノードの特定の数は、クラスタに参加しているまで待ってみたかった:

function waitUntilView(expectNumMembers, nodeName) { 
    return waitUntil(
    function(members) { expect(members.length).toEqual(expectNumMembers); }, 
    function(members) { return _.isEqual(expectNumMembers, members.length); }, 
    getClusterMembers(nodeName) 
); 
} 
関連する問題