/ / Promiseの解決にqunitアサーションを実行する方法 - javascript、promise、qunit、rsvp.js、rsvp-promise

Promiseを解決するためのqunitアサーションの実行方法 - javascript、promise、qunit、rsvp.js、rsvp-promise

私はを返す関数のテストを書いています約束し、約束を解決または拒否することについてアサーションを実行することはできません。私はこのプロジェクトでES6を使うことができないので、Promises / A +仕様を実装すると主張するrsvp.jsライブラリを使っています。最新のqunitバージョン1.17.1を使用しています

テスト中の機能

var loadGroups = function(data) {
return new RSVP.Promise(function(resolve, reject) {
var groups = [];
// ... some code to populate the groups array
if(groups.length > 0) {
resolve(groups);
} else {
reject("No groups were loaded");
}
});
};

成功テスト

test("success test", function(assert) {
assert.expect(1);

var promise = loadGroups(testData);

promise.then(function(groups) {
assert.deepEquals(groups.length, 1);
});

return promise;
});

これは「期待される1つのアサーション、しかし0が実行された」と失敗します


失敗テスト

test("failure test", function(assert) {
assert.expect(1);

var promise = loadGroups([]);

promise.then(null, function(message) {
assert.equals(message, "No groups were loaded");
});

return promise;
});

これは失敗し、「空のグループをロードするときにPromiseが拒否されました。ロードされたグループはありませんでした」というメッセージが表示されます。

回答:

回答№1の場合は10

連鎖することで作業を約束します。約束は値に対する不変のラッパーです。

あなたがするとき:

promise.then(function(e){
// do something
});

変わらない promise あなたは代わりに新しい約束を作成しています。代わりに、約束を結び付ける必要があります。

test("success test", function(assert) {
assert.expect(1);

var promise = loadGroups(testData);

// return the `then` and not the original promise.
return promise.then(function(groups) {
assert.deepEquals(groups.length, 1);
});

});