Estoy usando sinon para agregar funciones de Google Drive en mi aplicación NodeJS. Hago dos llamadas diferentes del método de create bajo la misma prueba (no puedo restaurar entre llamadas):
// Call 1: drive.files.create({ 'requestBody': requestBody, 'media': media }); // Call 2: drive.files.create({ 'resource': resource });Con el fin de stub, podría hacer algo como:
const stub = sinon.stub(drive.files, 'create').returns({ 'status': 200, 'data': { 'files': [{ 'id': id }] } });Este stub, en realidad, stubs ambas llamadas, pero ¿qué pasa si quiero tener una primera llamada exitosa y fallar en la segunda llamada? ¿Cómo distingo entre las dos llamadas (tal vez) según los argumentos?
Puede usar stub.withArgs(arg1[, arg2, ...]); API.
También es útil crear un stub que pueda actuar de manera diferente en respuesta a diferentes argumentos.
P.ej
const sinon = require('sinon'); describe('72234931', () => { it('should pass', () => { const drive = { files: { create(opts) {}, }, }; const stub = sinon.stub(drive.files, 'create'); stub.withArgs({ requestBody: 'requestBody', media: 'media' }).returns({ status: 200, data: { files: [{ id: 1 }], }, }); stub.withArgs({ resource: 'resource' }).returns({ status: 500 }); const r1 = drive.files.create({ requestBody: 'requestBody', media: 'media' }); sinon.assert.match(r1, { status: 200, data: { files: [{ id: 1 }] } }); const r2 = drive.files.create({ resource: 'resource' }); sinon.assert.match(r2, { status: 500 }); }); });