在 Jest 中模拟 AudioContext()

mocking AudioContext() in Jest

我的项目中的一个函数中有以下代码;

....
if (state.context == null) {
    return {
        ...state,
        context: new AudioContext()
    }
}
....

我正在尝试在 Jest 中测试此行为。但是,Jest 使用不支持 AudioContext()

的 jsdom

在我使用的其他测试中;

.....
jest.spyOn(global.Math, 'random').mockReturnValue(0.3);
....
jest.spyOn(global.Math, 'random').mockRestore();
....

这行不通。当我调用 spyOn(global /* or window */, 'AudioContext') 时,出现错误 Cannot spy the AudioContext property because it is not a function; undefined given instead

我还发现了这个 library,它似乎可以工作,只是它要求您在代码中使用函数的模拟版本,而不是像我一直在做的那样重载它 random().

我会替换 jsdom 作为我的测试环境,但是,我还没有找到支持 AudioContext() 的环境。

有没有不修改源代码的解决方案?在运行时传入调用 AudioContext() 模拟或函数 AudioContext 的函数?

我是问题中提到的库的作者。我认为以下应该有效。

import { AudioContext } from 'standardized-audio-context-mock';

global.AudioContext = AudioContext;

但是,我自己并不是 Jest 用户。如果它不起作用,请告诉我,如果您遇到任何错误,请随时 open an issue