Итак, у меня есть этот оператор импорта в модуле, который я пытаюсь протестировать, используя jest 25.1, работающий на узле 11.1.0. Оператор import предназначен для модуля, который доступен только при запуске во время выполнения jashm jvm, поэтому я использую виртуальный макет jest для управления поведением в модульных тестах. Вот как выглядит оператор импорта в тестируемом модуле:
import RequestBuilder from 'nashorn-js/request_builder'
... и после других строк в блоке импорта это:
const request = RequestBuilder.create('some-string')
.sendTo('some-other-string')
.withAction('yet-another-string')
.getResultWith( consumer => consumer.result( consumer.message().body() ) )
export const functionA = () => {...} // uses 'request' variable
export const functionB = () => {...} // uses 'request' variable
В соответствующем. spe c file, у меня есть виртуальная макетная установка:
const mockGetResultWith = {
getResultWith: jest.fn()
}
const mockWithAction = {
withAction: jest.fn().mockImplementation(() => mockGetResultWith)
}
const mockSendTo = {
sendTo: jest.fn().mockImplementation(() => mockWithAction)
}
const mockBuilder = {
create: jest.fn().mockImplementation(() => mockSendTo)
}
jest.mock(
'nashorn-js/request_builder',
() => mockBuilder,
{ virtual: true }
)
require('nashorn-js/request_builder')
import { functionA, functionB } from './module-under-test'
Я безуспешно пытаюсь преодолеть эту неудачу из-за шутки:
● Test suite failed to run
TypeError: Cannot read property 'create' of undefined
35 | }
36 |
> 37 | const verify = RequestBuilder.create('some-string')
| ^
38 | .sendTo('some-other-string')
39 | .withAction('yet-another-string')
40 | .getResultWith( consumer => consumer.result( consumer.message().body() ) )
Я пробовал все виды различных макетов, используя require
против import
и др. c, но не нашли магию c пули.
Насколько я могу судить, не похоже, что RequestBuilder
оператор import даже вызывает виртуальный макет. Или, по крайней мере, если я добавлю операторы console.log()
в виртуальную фабричную функцию, я никогда не увижу эти сообщения журнала в выводе.
Кто-нибудь знает, что мне не хватает или что еще попробовать? У меня почти такой же шаблон используется в других частях кода, где эта установка работает, но по какой-то мистической причине с этим модулем я не могу заставить работать виртуальный макет. Любая помощь с благодарностью.