gpt4 book ai didi

javascript - 使用 jest.unstable_mockModule 模拟 ES6 模块时遇到问题

转载 作者:行者123 更新时间:2023-12-05 00:27:02 33 4
gpt4 key购买 nike

我正在尝试模拟对由被测代码导入的 ES6 模块上的类实例函数的调用。我一直关注 ES6 支持的进展,最终偶然发现了这个 PR https://github.com/facebook/jest/pull/10976其中提到在 27.1.1 中添加了对 jest.unstable_mockModule 的支持。我升级了我的 Jest 版本以利用它,虽然测试没有出错,但它似乎也没有真正模拟模块。
这是正在测试的模块:

// src/Main.mjs

import Responder from './Responder.mjs'
import Notifier from './Notifier.mjs'

export default {
async fetch(request, environment, context) {
let response

try {
response = new Responder(request, environment, context).respond()
} catch (error) {
return new Notifier().notify(error)
}

return response
}
}
这是测试:
// test/Main.test.mjs

import { jest } from '@jest/globals'
import main from '../src/Main.mjs'

describe('fetch', () => {
test('Notifies on error', async () => {
const mockNotify = jest.fn();

jest.unstable_mockModule('../src/Notifier.mjs', () => ({
notify: mockNotify
}))

const notifierMock = await import('../src/Notifier.mjs');

await main.fetch(null, null, null)

expect(mockNotify).toHaveBeenCalled()
})
})
我试图模拟对 Notify 的调用以期望它已被调用,虽然它会运行,但它会从 Notifier.notify() 内部引发异常那应该被 mock ,所以看起来它根本没有被 mock 。
我错过了什么?任何帮助深表感谢。 🙏

最佳答案

我相信这是因为您在文件开头导入 main 。您需要以与 Notifier.mjs 相同的方式进行动态导入

// test/Main.test.mjs

import { jest } from '@jest/globals'


describe('fetch', () => {
test('Notifies on error', async () => {
const mockNotify = jest.fn();

jest.unstable_mockModule('../src/Notifier.mjs', () => ({
notify: mockNotify
}))

const notifierMock = await import('../src/Notifier.mjs');
const main = await import('../src/Main.mjs');

await main.fetch(null, null, null)

expect(mockNotify).toHaveBeenCalled()
})
})

关于javascript - 使用 jest.unstable_mockModule 模拟 ES6 模块时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69393176/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com