Una pequeña rutina de programa que sustituye a un programa más largo que se puede cargar más tarde o que se encuentra en una ubicación remota.
Características del talón:
- Los talones pueden ser anónimos.
- Los stubs se pueden envolver en funciones existentes. Cuando envolvemos un código auxiliar en la función existente, no se llama a la función original.
- Los stubs son funciones o programas que afectan el comportamiento de componentes o módulos.
- Los stubs son objetos ficticios para realizar pruebas.
- Los stubs implementan una respuesta preprogramada.
Ejemplo:
var fs = require('fs') var writeFileStub = sinon.stub(fs, 'writeFile', function (path, data, cb) { return cb(null) }) expect(writeFileStub).to.be.called writeFileStub.restore()
¿Cuándo usar talones?
- Evita que se llame directamente a un método específico.
- Controlar el comportamiento del método por una ruta específica desde una prueba para forzar el código. Por ejemplo: Manejo de errores.
- Reemplazar las piezas de código problemáticas.
- Probar código asíncrono fácil.
Ejemplo para crear un código auxiliar asíncrono que lanza una excepción:
require("@fatso83/mini-mocha").install(); const sinon = require("sinon"); const PubSub = require("pubsub-js"); const referee = require("@sinonjs/referee"); const assert = referee.assert; describe("PubSub", function() { it("Calling all the subscribers, irrespective of exceptions.", function() { const message = "an example message"; const stub = sinon.stub().throws(); const spy1 = sinon.spy(); const spy2 = sinon.spy(); const clock = sinon.useFakeTimers(); PubSub.subscribe(message, stub); PubSub.subscribe(message, spy1); PubSub.subscribe(message, spy2); assert.exception(()=>{ PubSub.publishSync(message, "some data"); clock.tick(1); }); assert.exception(stub); assert(spy1.called); assert(spy2.called); assert(stub.calledBefore(spy1)); clock.restore(); }); });
Producción:
Calling all the subscribers, irrespective of exceptions.
Ejemplo de talones: Consideremos un ejemplo de un sitio web de comercio electrónico para comprar artículos. Si tenemos éxito, se enviará un correo al cliente.
const purchaseItems(cartItems, user)=>{ let payStatus = user.paymentMethod(cartItems) if (payStatus === "successful") { user.SuccessMail() } else { user.redirect("error_page_of_payment") } } } function() { // Mail will be send for successful payment. let paymentStub = sinon.stub().returns("successful") let mailStub = sinon.stub( let user = { paymentMethod: paymentStub, SuccessMail: mailStub } purchaseItems([], user) assert(mailStub.called) }
Ejemplo 1: un ejemplo simple para ejecutar stubs.
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <div id="mocha"></div> </body> </html>
<!DOCTYPE html> <html> <head> <script> mocha.setup('bdd'); function saveUser(user, callback) { $.post('/users', { first: user.firstname, last: user.lastname }, callback); } describe('saveUser', function () { it('should call callback after saving', function () { // We'll stub $.post so a // request is not sent var post = sinon.stub($, 'post'); post.yields(); // We can use a spy as the callback // so it's easy to verify var callback = sinon.spy(); saveUser({ firstname: 'Han', lastname: 'Solo' }, callback); post.restore(); sinon.assert.calledOnce(callback); }); }); mocha.run(); </script> </head> </html>
Producción:
Ejemplo 2:
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>GeeksForGeeks</h1> <div id="mocha"></div> </body> </html>
<!DOCTYPE html> <html> <head> <script> mocha.setup('bdd'); function saveUser(user, callback) { $.post('/users', { first: user.firstname, last: user.lastname }, callback); } describe('saveUser', function () { it( 'It will send the correct parameters to the expected URL', function () { // We'll stub $.post same as before var post = sinon.stub($, 'post'); // We'll set up some variables to // contain the expected results var expectedUrl = '/users'; var expectedParams = { first: 'Expected first name', last: 'Expected last name' }; // We can also set up the user we'll // save based on the expected data var user = { firstname: expectedParams.first, lastname: expectedParams.last } saveUser(user, function () { }); post.restore(); sinon.assert.calledWith(post, expectedUrl, expectedParams); }); }); mocha.run(); </script> </head> </html>
Producción:
Publicación traducida automáticamente
Artículo escrito por sharmaanushka y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA