Tengo un método dentro de una clase que calcula la suma de 2 parámetros que devuelve una Promesa (imprescindible):
module.exports = class Sum { sum(a, b) { let c = a + b; const myPromise = new Promise(function(myResolve) { setTimeout(function(){ myResolve(c); }, 100); }); return myPromise; } }Utilizo Jasmine framework para realizar pruebas unitarias.
const MyLocalVariable1 = require('../src/sum'); describe('CommonJS modules', () => { it('should import whole module using module.exports = sum;', async () => { const result = new MyLocalVariable1(); expect(result.sum(4, 5).then(function(value) { return value; })).toBe(9); }); }La primera expresión es lo que queremos probar:
result.sum(4, 5).then(function(value) { return value; })y el segundo es el valor esperado:
toBe(9)Pero, ¿cómo puedo obtener un valor de la primera expresión, porque es una Promesa y el valor esperado es [objeto Promesa] ? Gracias por adelantado
Para llevar el punto de Konrad a casa, puede hacer lo siguiente:
it('should import whole module using module.exports = sum;', async () => { const result = new MyLocalVariable1(); const answer = await result.sum(4, 5); expect(answer).toBe(9); });O lo siguiente:
// add done callback to tell Jasmine when you're done with the unit test it('should import whole module using module.exports = sum;', (done) => { const result = new MyLocalVariable1(); result.sum(4, 5).then(answer => { expect(answer).toBe(9); done(); }); });