Bluebird Cada bucle en Mocha no funciona
Estoy escribiendo una prueba donde necesito recorrer los resultados de una llamada API asíncrona y hacer dinámicamente el mocha 'Its' para probar cada iteración de la respuesta. Encontré algunas otras respuestas relacionadas que me ayudaron a comenzar. Esto es lo que he intentado hasta ahora.
function getter(uri) {
return new Promise(function(resolve, reject) {
request({
method: 'GET',
json: true,
uri: uri
}, function(error, response, body) {
if (response.statusCode == 200) {
resolve(body);
} else {
reject(error);
}
});
});
}
describe('This works', function() {
it('works', function(done) {
getter('myapi_that_returns_an_array').then(function(r) {
r.should.not.be.empty;
done();
}).catch(function(err) {
done(err);
});
});
});
describe('Why not this one', function() {
getter('myapi_that_returns_an_array').each(function(r) {
it('should make a test', function(done) {
r.should.not.be.empty;
done();
});
});
});
¡Intenté simplemente envolver una matriz simple en una promesa y alimentar eso a mi prueba y funciona! Por lo tanto, no puedo entender por qué la llamada API que hago no funciona de la misma manera.
function simple_test() {
return new Promise(function (resolve, reject) {
resolve([ [1, 2, 3, 4], [2, 3, 4, 1], [3, 4, 2, 1], [4, 1, 2, 3] ]);
});
}
describe('But this one works', function() {
two().each(function(r) {
it('is a test', function(done) {
r.should.not.be.empty();
done();
});
});
});
Intenté agregar un tiempo de espera a simple_test para que actuara como la llamada a la API: el resultado es el mismo que la llamada a la API. ¿Hay alguna manera de hacer esto con Mocha? Parece que la descripción se está ejecutando antes de esperar a que se resuelva la promesa.