我正在测试我的 React 应用程序,当它运行执行 Web Cryptography API 的测试时,特别是
await crypto.subtle.generateKey
,我收到以下错误消息
ReferenceError:加密货币未定义
React 测试库似乎无法访问该库,这是有道理的,因为这是浏览器本机的 API,而 React 测试库模拟了一个库。
如何添加库以使测试通过?遵循 TDD 原则,我不应该修改代码以使其通过测试。
正如 @Jayce44 建议的那样,您只需向窗口对象添加一个模拟即可。无论如何,删除测试中的任何随机组件都是一个很好的模式(尤其是在 TDD 中)。定义一个假/模拟加密模块,在其中根据测试用例定义它的输出对于编写可靠的测试用例有很多好处。根据您使用的框架,它可能看起来像这样:
beforeEach(() => {
setupCryptoWithExpectedValue(42)
});
test(() => {
productionCodeUsingCrypto()
}
我遇到了和你一样的问题,但其实他不是问题。
因为此 API 只能在 localhost 和 HTTPS 环境中运行。
因此,你出错的场景可能是在HTTP环境下运行的