Ответ 1
Вы правы, думая, что это невозможно с тем, как модуль в настоящее время структурирован.
Когда код выполняется, ссылка baz
внутри function bar
разрешена в отношении локальной реализации. Вы не можете изменить это, поскольку вне кода модуля нет доступа к внутренним компонентам.
У вас есть доступ к экспортированным свойствам, но вы не можете их мутировать и поэтому не можете влиять на модуль.
Один из способов изменить это, используя следующий код:
let obj = {};
obj.bar = function () {
this.baz();
}
obj.baz = function() {
...
}
export default obj;
Теперь, если вы переопределите baz
в импортированном объекте, вы будете влиять на внутренности bar
.
Сказав это, это выглядит довольно неуклюжим. Существуют и другие методы управления поведением, такие как инъекция зависимостей.
Кроме того, вы должны подумать, действительно ли вы заботитесь о том, был ли вызван baz
. В стандартном "тестировании черного ящика" вам все равно, как что-то сделано, вам все равно, какие побочные эффекты он генерирует. Для этого проверьте, были ли побочные эффекты, которые вы ожидали, и что ничего больше не было сделано.