У меня есть следующий сценарий:
- В моем файле .js я импортирую экспорт пакета по умолчанию foo
- Этот экспорт имеет два свойства Bar и Baz , оба они являются классами ES6
- В моем файле .test.js я теперь хочу высмеивать эти два класса и шпионить за их конструкторами
.js-код выглядит примерно так:
import foo from 'foo/dist/foo.min';
const { Bar, Baz } = foo;
...
const fooBar = new Bar();
В моем файле .test.js я теперь высмеиваю пакет следующим образом:
jest.mock('foo/dist/foo.min');
Автоматический макетработает как положено, но, конечно, не позволяет мне шпионить за конструкторами Bar и Baz, что я и хотел бы.
Я попытался просто сделать это в моем файле .test.js:
import foo from 'foo/dist/foo.min';
jest.mock('foo/dist/foo.min');
foo.Bar = jest.fn();
foo.Baz = jest.fn();
Но, похоже, это ничего не делает, мои поддельные конструкторы jest.fn () никогда не вызываются.
Я прочитал эту страницу в документации: https://jestjs.io/docs/en/es6-class-mocks.html, нопохоже, предполагается, что класс ES6, который нужно смоделировать, экспортируется непосредственно из модуля и находится внутри проекта, а не пакета npm.
Автоматическая имитация у меня не работает, потому что классы сами не экспортируются.
- Я не могу использовать
mockImplementation()
в моем пакете foo, так как это не функция, верно? - Я не вижу способа сделать ручной макет, потому что это пакет npm.
Буду признателен за любые предложения, как решить эту проблему.