typescript 未定义Jest测试中的FileReader、文件和文本解码器

hof1towb  于 2023-03-04  发布在  TypeScript
关注(0)|答案(3)|浏览(127)

以前我只用Jasmine做测试,现在我尝试Jest,但面临的问题是像FileReader, File and TextDecoder这样的东西在我的测试中没有定义,我如何使用这些类的真实的函数来测试使用它们的类呢?

ghhaqwfi

ghhaqwfi1#

至少对于TextDecoder,我已经在@josephting的注解的帮助下找到了一种解决方法,这真的很糟糕,因为它需要你安装一个dev依赖项,这个依赖项也被弃用了,不再被维护,叫做text-encoding
首先,您需要在jest.config.js中定义setupFiles

[...]
setupFiles: ['./tests/setupEnv.js'],
[...]

您还需要在您的setupEnv.js中全局使用上述软件包:

TextDecoder = require('text-encoding').TextDecoder;
k4aesqcs

k4aesqcs2#

我找到了一个解决这个问题的方法,我在jest中添加了TextEncoder和TextDecoder作为全局变量。
我把这个加到我的jest.config

const { TextDecoder, TextEncoder } = require('util')

module.exports = {
  globals: {
    TextDecoder: TextDecoder,
    TextEncoder: TextEncoder,
  }
}
qnakjoqk

qnakjoqk3#

如果你正在使用笑话,那么最好的解决方案是从亚瑟Medeiros:只允许jest访问它需要的全局变量,注意你可能不需要导入util,因为TextDecoderTextEncoder应该在jest配置文件的全局范围内;你只需要globals: { TextDecoder, TextEncoder },在你的配置文件的导出.

  • 但是 * 有时候你可能不想在你的套件中的 * 所有 * 测试中包含这些全局变量(并且不想有另一个配置文件),或者使用了jest以外的东西。在这些情况下,你可以把这个添加到你的测试文件中:
import { TextDecoder, TextEncoder } from 'node:util'; // (ESM style imports)

global.TextDecoder = TextDecoder;
global.TextEncoder = TextEncoder;

// Do whatever you wanted to do... (for me, it was using node-fetch)

相关问题