Sto cercando di ottenere alcuni input da alcuni tester più esperti di quello che sono. :)
Sto cercando di rendere testabili i miei moduli di nodo, consentendo la dipendenza spying / stubbing / mocking senza la necessità di utilizzare una libreria magica come rewire o mockery per intercettare le mie istruzioni import / require del modulo.
Stavo pensando di utilizzare un approccio in base al quale creerei una funzione di fabbrica all'interno di ciascun modulo. La funzione factory accetta le dipendenze richieste per il modulo da esportare. L'esportazione predefinita chiamerebbe la funzione di fabbrica usando le istruzioni di importazione standard dal modulo. Esporterei anche la funzione di fabbrica stessa, consentendo ai miei test di iniettare qualsiasi dipendenza che preferiscono.
Ecco un esempio (completamente ideato e semplificato per evidenziare l'approccio alla progettazione):
import { foo } from './utils/foo';
// We export our factory, exposing it to consumers.
export const factory = (dependencies = {}) => {
const {
$foo = foo // defaults to standard imp if none provided.
} = dependencies;
return function bar() {
return $foo();
}
}
// The default implementation, which would end up using default deps.
export default factory();
Pensieri? È troppo verboso? C'è un meccanismo migliore per raggiungere lo stesso? Sono un po 'preoccupato per le aggiunte alla piastra della caldaia che aggiungerò al mio progetto, ma forse ne vale la pena.