/ / Cómo ejecutar aserciones qunit para resolver una promesa - javascript, promise, qunit, rsvp.js, rsvp-promise

Cómo ejecutar aserciones qunit para resolver una promesa - javascript, promise, qunit, rsvp.js, rsvp-promise

Estoy escribiendo una prueba para una función que devuelve unpromesa, y no puedo hacer aseveraciones para resolver o rechazar la promesa. No puedo usar ES6 en este proyecto, así que estoy usando la biblioteca rsvp.js que pretende implementar la especificación Promises / A +. Estoy usando la última versión de qunit 1.17.1

La función bajo prueba:

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

La prueba de éxito:

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

var promise = loadGroups(testData);

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

return promise;
});

Esto falla con "Se esperan 1 aserciones, pero se ejecutaron 0"


La prueba de falla:

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

Esto falla con "Promesa rechazada durante obtener promesa al cargar grupos vacíos: no se cargaron grupos"

Respuestas

10 por respuesta № 1

Promete trabajar encadenando. Las promesas son envoltorios inmutables sobre los valores.

Cuando tu lo hagas:

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

No estas cambiando promise estás creando una nueva promesa en su lugar. En su lugar, necesitas encadenar la promesa:

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

});