- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
{ expect(btoa("aaa")).toStrictEqual("YWFh"); }); 失败 ReferenceE-6ren">
创建一个 Jest 测试,例如:
test("btoa", () => {
expect(btoa("aaa")).toStrictEqual("YWFh");
});
失败
ReferenceError: btoa is not defined
但是,从节点 16 开始,node
确实定义了 btoa
,因此如下:
console.log(bota("aaa"))
正确输出YWFh
。
我如何配置 jest 才能让这个测试通过?显然,jest 测试运行器中发生了某些事情,无法在当前节点环境中执行,或者正在剥离特定的内置函数,只是我似乎找不到任何关于如何调试或调整它的文档。
通过在“纯 js”中手动编写编码或依赖于类似的东西,有一些解决方法,但我特别感兴趣的是为什么 Jest 执行结束无法找到似乎存在于其他环境。
这在 mocha 等其他测试框架中也能正常工作,因此它显然与 jest runner 尤其相关。
最佳答案
在对 为什么 btoa/atob
在 node 中可用但在 jest running in node 中不可用进行了大量搜索和摸索之后,我终于弄明白了。 Jest 在 vm
中运行所有测试,这是一个隔离的沙箱环境。 btoa/atob
方法不会自动暴露在 VM 内的 global
对象上。最好用例子来解释:
const vm = require('vm');
// this works outside the vm - but for legacy reasons only
// you shouldn't be doing this in the first place
btoa('aaa'); // -> "YWFh"
const context = vm.createContext({});
const code = 'btoa("aaa")';
vm.runInContext(code, context); //-> Uncaught ReferenceError: btoa is not defined
Note: The answer described below is still the "solution" - you need to define these methods for use in node, and then you need to expose them using jest's
globalSetup
.
问题的根源在于 NodeJS 和网络浏览器具有不同的 API。例如,当我尝试在我的节点应用程序中使用 btoa
时收到此弃用通知。
解决方案的第一部分是您需要提供自己的 atob
/btoa
方法以在 NodeJs 中使用(参见 examples here )。然后您需要使用 jest 的 globalSetup
使这些可用配置:
/** Encodes a string as base64 format */
global.btoa = (str: string) => Buffer.from(str, 'binary').toString('base64');
/** Decodes a base64 encoded string */
global.atob = (str: string) => Buffer.from(str, 'base64').toString('binary');
如果您觉得自己做这件事不自在,可以使用一些库和工具为您做这件事(jsdom、phantomjs、testing-library)。这些库本质上是在节点环境中复制浏览器 API,以执行运行测试、服务器端渲染等操作。我建议阅读 testing web frameworks。代码示例和技术。
关于javascript - 开 Jest 找不到 `bota` 和 `atob`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70960157/
我需要将 Base64 字符串解码为 PDF 文件。我正在使用这个代码。但window.atob命令总是报告该错误:无法在“Window”上执行“atob”:要解码的字符串未正确编码。 我知道该文件是
Screen1.js import React,{useEffect} from 'react' import {View,Text} from 'react-native' import * as
我最近使用控制台来娱乐自己。当我使用用于ENCODE到base64的window.atob()函数时,我注意到它给出了特殊字符串sdfsdfsdf<的错误。 你可以自己尝试一下!另请注意,这是 ENC
所以,这是问题: Uncaught InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be deco
我通过正则表达式在 Javascript 中创建了一个亵渎过滤器,但是我不希望禁止的单词出现在我的代码中,所以我使用 btoa 对正则表达式进行编码;但是,当我使用atob对其进行解码时,正则表达式不
我正在 laravel 5.4 中制作一个网络应用程序,我有一些表格和一些记录,如下所示。 评估成员(表) id | evalution_id | member_id ----------------
我已经阅读了堆栈溢出中的一个问题,该代码在 IE 10 中有效但在 ie9 中无效, 但我仍然面临着这个问题。 var image = canvas.toDataURL(); image = imag
我正在尝试使用 atob 将 base64 编码数据转换为字符串。我发现它在 Mozilla 和 Chrome 中工作正常,但在 IE 中不起作用。请告诉我任何替代品,或者如何使其在 IE 中工作 最
我正在尝试解码 javascript base64 字符串。编码后的字符串来自 dataUri。这是 text file 我正在尝试解码“//5mAG8AbwAgAGIAYQByAAoA”,它应该将“
在我的 Ionic 应用程序中,我使用 atob() 命令。 它在 chrome 和 android 上运行良好,但由于某些原因它在 iOS 上不起作用,是否有替代方案? 最佳答案 在 IOS 中,a
我有一个 BMP 图像,我需要通过 TCP/IP 将其发送到设备。我们公司已经有 C 库,它可以处理这个问题,但我需要用 JavaScript 来完成。不幸的是,我无法访问该库的源代码,也无法访问设备
当用户按下 ctrl + s 键但 Chrome 崩溃时,我试图在 Chrome 中保存我的 HTML 文件。 (我只想下载我的 HTML 文件的源代码) 我读到这是因为我的文件大于 1.99M..
我正在接收 zip 文件的内容(来自 API)作为 Base64 编码的字符串。 如果我将该字符串粘贴到 Notepad++ 中并执行 Plugins > MIME Tools > Base64 De
我在服务器上创建了一个二进制 Excel 文件,我使用从 JavaScript/JQuery $ajax 调用调用的 Convert.ToBase64String(FileData) 从 C# Web
我有使用 lz-string 加密的数据包。 我还将结果转换为 base64,并使用 atob() 函数从 base64 转换。 问题是atob()没有按预期工作,但 Buffer.from(b64,
创建一个 Jest 测试,例如: test("btoa", () => { expect(btoa("aaa")).toStrictEqual("YWFh"); }); 失败 ReferenceE
我有一个 AJAX 调用,从 Github API 获取信息。它以 Base64 编码返回,但当我尝试对其进行解码时,出现上述错误。 有没有人遇到过这种情况并且知道发生了什么事?服务器返回的信息通过基
我使用 jquery 从所有具有 .my-images 类的 img 标签中选择所有图像 url 然后我尝试使用 jsPDF 将它们放入 pdf 捆绑文件中。像这样: //Creating the P
我遇到了抛出异常的 atob 问题 The string to be decoded is not correctly encoded. 关于堆栈溢出已经有一些类似的问题,但它们涉及“复杂”问题(文件
我编写了一个函数,可以将字符串的每 5 个字符与 Base64 进行编码和解码。编码可以完美地工作,但解码却不能。控制台说: INVALID_CHARACTER_ERROR: DOM Exceptio
我是一名优秀的程序员,十分优秀!