En se moquant des dépendances Node, je suis tombé sur les bibliothèques suivantes:
Ils semblent tous faire plus ou moins la même chose: vous permettre de vous moquer des appels de require()
(à l'exception de Sinon qui se moque à peu près de tout). Ils semblent tous nécessiter une configuration assez élaborée, notant la syntaxe exacte de la chaîne passée à require
- pas très bien lors du refactoring.
Quels sont les avantages et les inconvénients de chaque bibliothèque? Quand devrais-je choisir l'un plutôt que l'autre? Quels sont des exemples de cas d'utilisation où chaque bibliothèque excelle? Quels sont les autres produits de cet espace qui sont meilleurs?
Cela ressemble totalement à de la triche, mais comme personne d'autre ne répond à la question, voici:
Proxyquire reprend require
et vous permet d'injecter des contrefaçons n'importe où dans la chaîne de dépendance. Pour les require
s que vous ne prenez pas le relais et pour les méthodes que vous ne définissez pas pour les require
s que vous prenez le relais, cela reviendra à l'original. Cela peut être désactivé avec noCallThru
. Ainsi, il charge toujours l'original, remplace simplement les choses par les choses que vous définissez. Contrairement à Rewire et SandboxedModule, vous ne pouvez pas définir de variables globales pour vos surcharges require
.
Rewire reprend require
et injecte __get__
et __set__
propriétés dans chaque module. Si vous connaissez le nom de la variable privée, vous pouvez le remplacer. Pensez à l'injection de dépendance.
SandboxedModule est presque identique à Proxyquire, sauf qu'il exécute l'ensemble du processus dans un nouveau V8 vm. (Il y a un coût de performance par test pour cette approche.) Il y a aussi un bogue désagréable dans la version 1.0 qui le fait échouer quand quelque chose que vous n'avez pas remplacé fait référence à un module natif qu'il ne prend pas en charge. Voir https://github.com/robrich/sandboxed-module-graceful-fs .
Sinon ne prend pas le contrôle de require
comme les trois autres. Il s'agit plutôt d'un cadre de simulation plus traditionnel. Remplacez les méthodes spécifiées par des contrefaçons ou créez une maquette qui suit son appel.