Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 开玩笑地嘲笑一个';在模块导出之前实例化_Javascript_Typescript_Mocking_Jestjs_Ts Jest - Fatal编程技术网

Javascript 开玩笑地嘲笑一个';在模块导出之前实例化

Javascript 开玩笑地嘲笑一个';在模块导出之前实例化,javascript,typescript,mocking,jestjs,ts-jest,Javascript,Typescript,Mocking,Jestjs,Ts Jest,我试图测试一个导出一个默认函数的文件,并在导出函数之前实例化一个对象,该对象需要在每次调用导出函数时保持为同一实例 以下是该模块的简化版本: import { HttpClient } from '../client' const client = new HttpClient() export default (params) => { const url = 'www.' // There's a little bit more code here to gener

我试图测试一个导出一个默认函数的文件,并在导出函数之前实例化一个对象,该对象需要在每次调用导出函数时保持为同一实例

以下是该模块的简化版本:

import { HttpClient } from '../client'

const client = new HttpClient()

export default (params) => {
    const url = 'www.'
    // There's a little bit more code here to generate the url based on the params passed in
    return client.get(url)
}
我想测试发送到client.get()函数的url是否正确,下面是测试:

import myModule from '../myModule'
import { HttpClient } from '../client'
jest.mock('../client')

const mockHttpClient = { get: jest.fn(() => 'test') }
HttpClient.mockImplementation(() => mockHttpClient)

it('should parse the query param string', () => {
    console.log(myModule({}))
})
当测试运行时,来自
myModule({})
的响应总是未定义的

但是,如果我将
const client=new HttpClient()
行向下移动到导出函数的内部,它将正常工作,
myModule({})
返回
test


我需要只定义一次HttpClient,并且每次调用函数时都使用相同的实例,因此它必须在函数外部实例化。如何模拟对象创建以返回自定义值?谢谢。

这是因为当您从“../client”调用
import{}时,它将在模拟构造函数之前立即调用
new HttpClient()
。你可以把你的模拟改成

jest.mock('../client', () => ({
  HttpClient: jest.fn(() => ({
    get: jest.fn(() => 'test'),
  }));
}));
但通常涉及网络IO的任何内容都是异步的,因此实际上可能需要返回一个承诺,如
jest.fn(()=>promise.resolve('test'))
jest.fn().mockResolvedValue('test')