首页 > 解决方案 > 使用 Jest 和 Create React App 模拟全局变量时出现未定义错误

问题描述

我是使用 JS 进行单元测试的新手,如果我遗漏了一些明显的东西,我深表歉意。

我需要navigator.mediaDevices.getUserMedia为一些测试模拟该方法,因此在中定义了以下内容setupTests.js

const mockMedia = {
    getUserMedia: jest.fn().mockImplementation(() =>
        Promise.resolve(
            "stream"
        ))
}
global.navigator.mediaDevices = mockMedia

在同一文件中进行测试时,这可以按预期工作:

navigator.mediaDevices.getUserMedia({video:true})
    .then((stream => console.log(stream)))

但是在我的组件中进行测试时,我得到TypeError: Cannot read property 'then' of undefined了相同的代码。

如果我不尝试调用模拟函数,它似乎存在:

console.log(navigator.mediaDevices)

    {
      getUserMedia: [Function: mockConstructor] { ... }
    }

但是调用会导致undefined

我在这里错过了什么,提前感谢

标签: javascriptreactjsunit-testingjestjscreate-react-app

解决方案


这可能是因为 CRAresetMocks默认为true.

在另一个问题中对此进行了解释。

这里建议恢复 CRA 中的默认值。


推荐阅读