【问题标题】:How to use File.text() in jest?如何在玩笑中使用 File.text()?
【发布时间】:2020-09-09 06:06:27
【问题描述】:

我有一些问题要通过一些测试。经过几个小时试图弄清楚发生了什么,我意识到 jest 对Files 有一些问题

我写了一个简单的测试,期望超过一个文件内容:

describe(".file test", () => {
    test("jest can work whit files", async () => {
      const aContent = "a_content";      
      const file = new File([aContent], "aFile.txt");
      const fileContent = await file.text()
      expect(fileContent).toBe(aContent)
    })
 )

那个简单的代码,在浏览器中的真实应用程序中执行时工作。但是,当我启动测试套件时,我得到一个错误:

TypeError: file.text 不是函数

  30 |       const aContent = "a_content";
  31 |       const file = new File([aContent], "aFile.txt");
> 32 |       const fileContent = await file.text()
     |                                      ^
  33 |       expect(fileContent).toBe(aContent)

那么,我需要开玩笑的是,可以使用 Files 吗?

【问题讨论】:

  • 有办法的。模拟Filetext 是最近添加的,不应该存在于 JSDOM 中。
  • 我不想模拟File.text,因为在实际测试中,我需要该函数返回文件的实际内容。如果我使用mockImplementation,它将隐藏应用程序的实际行为,并且在被测主题中读取多个文件,因此每次必须返回不同的内容。
  • 我认为多个文件没有问题。每次您需要时,都可以为 Jest spy 提供新的实现。 Jest 的 DOM 不应该也不能表现得像真实的东西。它是带有假 DOM 的 Node.js 环境,而不是浏览器。如果您想测试它的实际工作原理,请使用无头浏览器(Puppeteer)。
  • 您在寻找单元测试、集成测试还是 E2E 测试?
  • 我正在寻找单元测试。但是,感谢@EstusFlask cmets,我找到了解决方法

标签: reactjs testing jestjs react-testing-library


【解决方案1】:

感谢@EstusFlask cmets,我终于找到了解决方法。

我已经模拟了File.prototype.text 来返回文件对象本身。然后我可以使用FileReader 阅读其测试内容。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2019-01-18
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多