spec karma example javascript node.js jasmine jasmine-node

javascript - example - karma jasmine



Cómo forzar la rama de error en la prueba de nodo de jazmín (1)

Depende de tus pruebas. Si solo quieres una prueba unitaria, los espías son el camino a seguir. Solo puede resguardar su respuesta de DB. Tenga en cuenta que, en este caso, la base de datos no se llama. Simplemente simulado.

const db = require(''./yourDbModel''); spyOn(db.players, ''getAccountSummary'').and.callFake(function(id, cb) { cb(new Error(''database error''); }); request .get(''/api/players/'' + playerId + ''/summary'') .set(''Content-Type'', ''application/json'') .set(''cookie'', cookie) .expect(500) // ...

Si desea pruebas funcionales / de integración, debe llamar a su solicitud simplemente con datos incorrectos, por ejemplo, una identificación de jugador que no existe en su base de datos.

request .get(''/api/players/i_am_no_player/summary'') .set(''Content-Type'', ''application/json'') .set(''cookie'', cookie) .expect(500) // ...

Estoy probando la lógica del controlador detrás de los puntos finales API en mi servidor de nodo con jasmine-node. A continuación, se muestra el aspecto típico de esta lógica de controlador:

var getSummary = function(req, res) { var playerId = req.params.playerId; db.players.getAccountSummary(playerId, function(err, summary) { if (err) { logger.warn(''Error while retrieving summary for player %d.'', playerId, err); return res.status(500).json({ message: err.message || ''Error while retrieving summary.'', success: false }); } else { res.json({success: true, summary: summary}); } }); };

A continuación se muestra cómo probé con éxito el bloque else :

describe(''GET /api/players/:playerId/summary'', function() { it(''should return an object summarizing the player account'', function(done) { request .get(''/api/players/'' + playerId + ''/summary'') .set(''Content-Type'', ''application/json'') .set(''cookie'', cookie) .expect(200) .expect(''Content-Type'', /json/) .end(function(err, res) { expect(err).toBeNull(err ? err.message : null); expect(res.body.success).toBe(true); expect(res.body.summary).toBeDefined(); done(); }); }); });

Esto funciona bien, pero me deja con poca cobertura de sucursales ya que el bloque if nunca se prueba. Mi pregunta es, ¿cómo forzar el bloque de error para ejecutar en una prueba? ¿Puedo simular una respuesta que está configurada para devolver un error para que pueda probar que la advertencia correcta se registra y se transmiten los datos correctos?