Javascript Jest virtual mock:如何解决此故障?
因此,我在一个模块中有这个import语句,我正试图使用在节点11.1.0上运行的jest 25.1对其进行测试。import语句用于一个模块,该模块仅在jvm的nashorn运行时运行时可用,因此我使用jest的virtualmock来控制单元测试中的行为。以下是import语句在测试模块中的外观:Javascript Jest virtual mock:如何解决此故障?,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,因此,我在一个模块中有这个import语句,我正试图使用在节点11.1.0上运行的jest 25.1对其进行测试。import语句用于一个模块,该模块仅在jvm的nashorn运行时运行时可用,因此我使用jest的virtualmock来控制单元测试中的行为。以下是import语句在测试模块中的外观: 从'nashorn js/request\u builder'导入RequestBuilder' …在导入块中的其他行之后,这: const request=RequestBuilder.cre
从'nashorn js/request\u builder'导入RequestBuilder'
…在导入块中的其他行之后,这:
const request=RequestBuilder.create('some-string')
.sendTo('some-other-string')
.withAction('yet-other-string'))
.getResultWith(consumer=>consumer.result(consumer.message().body()))
export const function=()=>{…}//使用'request'变量
export const functionB=()=>{…}//使用'request'变量
在相应的.spec文件中,我有以下虚拟模拟设置:
const mockGetResultWith={
getResultWith:jest.fn()
}
常量mockWithAction={
withAction:jest.fn().mockImplementation(()=>mockGetResultWith)
}
常量mockSendTo={
sendTo:jest.fn().mockImplementation(()=>mockWithAction)
}
常量mockBuilder={
create:jest.fn().mockImplementation(()=>mockSendTo)
}
开玩笑(
“nashorn js/request_builder”,
()=>mockBuilder,
{virtual:true}
)
require('nashorn-js/request\u builder')
从“./测试中的模块”导入{function,functionB}
我一直试图通过玩笑来克服这个失败,但没有成功:
● 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
vsimport
等,但没有找到灵丹妙药
据我所知,RequestBuilder
import语句甚至没有调用虚拟模拟。或者至少,如果我将console.log()
语句添加到虚拟模拟工厂函数中,我就不会在输出中看到这些日志消息
有人知道我错过了什么或者还有什么可以尝试的吗?我在代码的其他部分中使用了几乎相同的模式,在这里这个设置可以工作,但是由于这个模块的一些神秘原因,我无法让虚拟模拟工作。非常感谢您的帮助。因此,这里的问题是jest在.spec文件中实现了
import
vsrequire
通过更改此行:
import{function,functionB}来自“./测试中的模块”
为此:
const module=require(“/测试中的模块”)
const function=module.function
const functionB=模块.functionB
正在测试的模块现在已成功加载,测试将按预期运行
我对此没有任何解释,也无法找到jest文档来描述为什么在require
vsimport
之间会出现任何不同的行为。事实上,我在任何import
语句之前都有模拟配置设置,如下所述:
如果有任何人了解这项导入行为的进展,或者有一个链接描述了我所缺少的内容,我一定会感谢您提供的信息