我正在用Jest测试我的graphql端点。基本上我正在评估从解析器返回的结果。但在这种情况下,我想测试是否在具有特定参数的解析器内调用了一个函数。代码类似于
import { sendLib } from '../lib'
export default {
send: async (input) => {
const data = {
foo: 1,
bar: 2,
...input
}
await sendLib(data)
return { input }
}
}
我想确保使用sendLib()
参数调用data
。最重要的是我需要测试data
是否具有正确的值。我一直在阅读Jest的.toHaveBeenCalledWith()
,但我无法弄清楚它是如何适合我的情况。
还有一种方法可以在不实际执行sendLib()
的情况下进行测试吗?因为该函数调用了HTTP请求,所以我真的不想浪费时间来测试。
答案 0 :(得分:0)
你应该在你的测试机智jest.fn中模拟lib,这样就不会调用你的实际函数实现或执行http请求。相反,它会调用mock函数。并且你可以断言下面所说的是我高大的一个粗略的例子
// filetotest.js
import { sendLib } from '../lib'
export default {
send: async (input) => {
const data = {
foo: 1,
bar: 2,
...input
}
await sendLib(data)
return { input }
}
}
//__tests__/filetotest.test.js
import { sendLib } from '../../lib'
import defaultImport from '../filetotest.js'
jest.mock('../../lib/', () => {
return {
sendLib: jest.fn()
}
})
test('call with correct data', async () => {
// call the function you are suppose to to test
await defaultImport()
// sendLib is a mockFn as jest.mock calls are hoisted
expect(SendLib).toHaveBeenCalledWith({data: ''})
})