/ / Як запускати твердження qunit про розв'язання обіцянки

Як керувати твердженнями qunit щодо вирішення обіцянки - javascript, обіцянка, qunit, rsvp.js, rsvp-обіцянка

Я пишу тест для функції, яка повертає aобіцяти, і я не можу виконувати твердження щодо розв'язання чи відхилення обіцянки. Я не можу використовувати ES6 на цьому проекті, тому я використовую бібліотеку rsvp.js, яка претендує на реалізацію специфікації Promises / A +. Я використовую останню версію 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;
});

Це не відповідає умові "Обіцяти відхилено під час отримання обіцянки під час завантаження порожніх груп: групи не завантажено"

Відповіді:

10 за відповідь № 1

обіцяє працювати шляхом ланцюжка. Обіцянки є незмінними обгортками над цінностями.

Коли ви робите:

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);
});

});