Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest virtual mock:如何解决此故障?_Javascript_Unit Testing_Jestjs - Fatal编程技术网

Javascript Jest virtual mock:如何解决此故障?

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

因此,我在一个模块中有这个import语句,我正试图使用在节点11.1.0上运行的jest 25.1对其进行测试。import语句用于一个模块,该模块仅在jvm的nashorn运行时运行时可用,因此我使用jest的virtualmock来控制单元测试中的行为。以下是import语句在测试模块中的外观:

从'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
vs
import
等,但没有找到灵丹妙药

据我所知,
RequestBuilder
import语句甚至没有调用虚拟模拟。或者至少,如果我将
console.log()
语句添加到虚拟模拟工厂函数中,我就不会在输出中看到这些日志消息


有人知道我错过了什么或者还有什么可以尝试的吗?我在代码的其他部分中使用了几乎相同的模式,在这里这个设置可以工作,但是由于这个模块的一些神秘原因,我无法让虚拟模拟工作。非常感谢您的帮助。

因此,这里的问题是jest在.spec文件中实现了
import
vs
require

通过更改此行:

import{function,functionB}来自“./测试中的模块”
为此:

const module=require(“/测试中的模块”)
const function=module.function
const functionB=模块.functionB
正在测试的模块现在已成功加载,测试将按预期运行

我对此没有任何解释,也无法找到jest文档来描述为什么在
require
vs
import
之间会出现任何不同的行为。事实上,我在任何
import
语句之前都有模拟配置设置,如下所述:

如果有任何人了解这项导入行为的进展,或者有一个链接描述了我所缺少的内容,我一定会感谢您提供的信息