tutorial node node.js mocking sinon proxyquire

node.js - node - Proxyquire, rewire, SandboxedModule y Sinon: pros y contras



sinon tutorial (1)

Al burlar las dependencias de Nodo, me he encontrado con las siguientes bibliotecas:

Todos parecen hacer más o menos lo mismo: permitir que se burlen de las llamadas require() (con la excepción de Sinon, que se burla de casi todo). Todos parecen requerir una configuración bastante elaborada, teniendo en cuenta la sintaxis exacta de la secuencia que se pasa para require , no excelente durante la refactorización.

¿Cuáles son los pros y los contras de cada biblioteca? ¿Cuándo elegiría uno sobre el otro? ¿Cuáles son ejemplos de casos de uso en los que sobresale cada biblioteca? ¿Cuáles son otros productos en este espacio que son mejores?


Se siente como hacer trampa, pero como nadie más está respondiendo la pregunta, aquí va:

  • Proxyquire asume require y le permite inyectar falsificaciones en cualquier lugar de la cadena de dependencia. Para requiere que no se haga cargo y para los métodos que no define para requiere que se haga cargo, se volverá a caer en el original. Esto se puede deshabilitar con noCallThru . Por lo tanto, todavía carga el original, simplemente reemplaza las cosas con las cosas que defines. A diferencia de Rewire y SandboxedModule, no puede definir variables globales para sus sobrecargas requeridas.

  • Rewire asume require e inyecta __get__ y __set__ propiedades en cada módulo. Si conoce el nombre de la variable privada, puede reemplazarlo. Piensa en la inyección de dependencia.

  • SandboxedModule es casi idéntico a Proxyquire, excepto que ejecuta todo el proceso en una nueva V8 vm. (Hay un costo de rendimiento por prueba para este enfoque). También tiene un error desagradable en v 1.0 que lo hace fallar cuando algo que no reemplazó hace referencia a un módulo nativo que no es compatible. Ver https://github.com/robrich/sandboxed-module-graceful-fs .

  • Sinon no asume el requerimiento como los otros 3. Más bien, es un marco de burla más tradicional. Reemplace los métodos especificados con falsificaciones, o cree un simulacro que rastree cuando fue llamado.