/ / Jak uruchomić asercje qunit przy rozwiązywaniu obietnicy - javascript, promise, qunit, rsvp.js, rsvp-promise

Jak uruchomić asercje qunit przy rozwiązywaniu obietnicy - javascript, promise, qunit, rsvp.js, rsvp-promise

Piszę test dla funkcji, która zwraca aobiecuję, i nie jestem w stanie prowadzić twierdzeń dotyczących rozwiązania lub odrzucenia obietnicy. Nie mogę użyć ES6 w tym projekcie, więc używam biblioteki rsvp.js, która twierdzi, że implementuje specyfikację Promises / A +. Korzystam z najnowszej wersji qunit 1.17.1

Testowana funkcja:

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 sukcesu:

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

var promise = loadGroups(testData);

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

return promise;
});

Nie powiedzie się to z twierdzeniami "Oczekiwano 1, ale 0 zostało uruchomionych"


Test awarii:

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

Nie powiedzie się to z "Obietnica odrzucona podczas otrzymywania obietnicy przy ładowaniu pustych grup: Nie załadowano żadnych grup"

Odpowiedzi:

10 dla odpowiedzi № 1

obiecuje pracę poprzez łańcuchowanie. Obietnice są niezmiennymi owijkami ponad wartościami.

Kiedy to zrobisz:

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

Nie zmieniasz się promise zamiast tego tworzysz nową obietnicę. Zamiast tego musisz połączyć obietnicę:

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

});