【发布时间】:2019-08-24 22:22:54
【问题描述】:
我正在尝试测试一个导出一个默认函数的文件,并且还实例化一个对象在导出的函数之前,每次调用导出的函数时该对象都需要保持为同一个实例。
这是模块的简化版本:
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 只定义一次,并且每次调用函数时都使用相同的实例,所以它必须在函数外部实例化。如何模拟该对象创建以返回我的自定义值?谢谢。
【问题讨论】:
标签: javascript typescript mocking jestjs ts-jest