我想使用jest来模拟来自第三方包的方法'sendBatch':单元测试中的“messaging-api-messenger”。
我的代码:
// sendMessages.js
async function sendMessage () {
const { MessengerClient } = require('messaging-api-messenger')
const client = new MessengerClient({accessToken: 'accessToken'})
return client.sendBatch([{message:'message', to:'someone'}]
}
module.exports = sendMessage()
// send.test.js
const Send = require('sendMessage')
const sendBatchMock = jest.fn().mockImplementation(() => {})
jest.mock('messaging-api-messenger', () => {
return {
MessengerClient: jest.fn().mockImplementation(() => ({
sendBatch: sendBatchMock
}))
}
})
sendBatchMock.mockReturnValue({
success: true,
responseData: [{ code: 200, body: { } }]
})
it('send message' async () => {
const sendResult = await Send.sendMessage()
expect(sendResult).toEqual('what I want')
}
这是sendBatch实际返回的:
sendResult {
success: true,
responseData: [ { code: 400, headers: [Array], body: [Object] } ]
}
但我希望sendBatch返回以下内容:
sendResult {
success: true,
responseData: [ { code: 200, headers: [], body: {} } ]
}
如何模拟在sendMessage.js调用的sendBatch方法,并要求sendBatch方法返回我想要的特定值,然后检查返回值?
1条答案
按热度按时间1l5u6lss1#
您的
sendMessage
函数未返回任何内容,因此sendResult
变量在此测试中未定义:您可以从该函数返回,因此将具有:
但这对测试没有意义
你可能需要检查你调用的
sendBatch
是用正确的参数调用的。要做到这一点,请参考Jest Mocking文档。你会得到这样的结果:
如果在模拟返回值后仍想检查结果: