1

(おそらくシムされた) ES6 promise を返す関数があり、それが正常に解決され、解決された値が正しいことを確認する Jasmine テストを作成したいと考えています。どうすればいいですか?

これは私が現時点で見つけた方法ですが、少なくとも退屈です:

describe("Promises", function() {
  it("should be tested", function(done) {
    var promise = functionThatReturnsAPromise();
    promise.then(function(result) {
      expect(result).toEqual("Hello World");
      done();
    }, function() {
      expect("promise").toBe("successfully resolved");
      done();
    });
  });
});

jasmine-as-promisedというライブラリもあり、役に立ちそうでしたが、残念ながら Jasmine 2.0 では機能しませんruns()

Jasmine 2.0 で Promise をテストするために開発された快適なソリューションはありますか?

4

2 に答える 2

2

本音をいうと?私ならモカを使います。Mocha では、単純に promise を返すことができます。また、既に Mocha の構文を非同期テストに使用しているため、構文は非常に似ています。次のようになります。

describe("Promises", function() {
  it("should be tested", function() {
    var promise = functionThatReturnsAPromise();
    return promise.then(function(result) {
      expect(result).toEqual("Hello World");
    }, function() {
      expect("promise").toBe("successfully resolved");
    });
  });
});

ただし、ネイティブの約束にこだわっていて、モカを使用できない場合は、実際にはおそらく唯一の代替手段であり、パターンをメソッドに抽出できます。

function itP(description, itfn){
    it(description, function(done){
        var result = itfn(); // call the inner it
        if(result.then) { // if promise was returned
            result.then(done, function(e){
                throw new Error("Async rejection failed " + e.message); 
            }); // resolve means done, reject is a throw
        } else {
            done(); // synchronous
        }
    }); 
}

itP("something", function(){
   return Promise.reject(); // this turns into a failed test
});
于 2014-08-16T18:38:07.697 に答える