Ответ 1
Это абсолютно похоже на обман, но поскольку никто не отвечает на этот вопрос, здесь говорится:
-
Proxyquire берет на себя обязательство и позволяет вам вводить подделки где угодно в цепочке зависимостей. Для этого требуется, чтобы вы не взяли верх и не использовали методы, которые вы не определяете, потому что вам нужно взять на себя ответственность, они вернутся к оригиналу. Это можно отключить с помощью
noCallThru
. Таким образом, он все еще загружает оригинал, просто заменяет вещи тем, что вы определяете. В отличие от Rewire и SandboxedModule, вы не можете определить глобальные переменные для ваших перегрузок. -
Ревикс берет на себя требование и вводит свойства
__get__
и__set__
в каждый модуль. Если вы знаете имя частной переменной, вы можете его заменить. Подумайте об инъекции зависимостей. -
SandboxedModule почти идентичен Proxyquire, за исключением того, что он запускает весь процесс в новом V8 vm. (Для этого подхода есть стоимость исполнения для каждого теста.) У него также есть неприятная ошибка в версии 1.0, которая заставляет его терпеть неудачу, когда что-то, что вы не заменили ссылками, не поддерживает собственный модуль, который он не поддерживает. См. https://github.com/robrich/sandboxed-module-graceful-fs.
-
Синон не берет на себя, как другой 3. Скорее, это более традиционная насмешка. Замените указанные методы на подделку или создайте макет, который отслеживает, когда он был вызван.