温馨提示:本文翻译自stackoverflow.com,查看原文请点击:reactjs - Jest is unable to find module from test file
jestjs reactjs testing unit-testing

reactjs - Jest无法从测试文件中找到模块

发布于 2020-04-12 00:03:06

我已经用create react app设置了一个应用程序。运行时yarn test,出现以下错误:Cannot find module 'react-google-button' from 'App.tsx'这似乎是由于找不到玩笑而引起的react-google-button

在运行应用程序时,yarn start它可以按预期工作。该错误是由react-google-button库本身引起的还是由错误的配置引起的?即使当我尝试模拟库时也会引发错误。

我创建了一个仓库,任何人都可以复制该错误:https : //github.com/kaladivo/jest-error(运行yarn test)。

有人可以帮我解决这个问题吗?我不知道如何解决。我知道一种可能的解决方案是不使用react-google-button库,但仍然无法解决将来可能会使用一些更关键的库的情况...

查看更多

提问者
David Novák
被浏览
40
wuno 2020-02-02 23:57

我发现Jest模块有问题的两个原因react-google-button

这似乎是配置问题以及模块的创建方式。一个问题是您正在使用,create-react-app并且不得不处理缺乏调整某些功能而不弹出的能力,例如文件扩展名在意。我认为另一个问题与玩笑与模块导入反应的方式表现不佳有关。

问题-

  1. 当查看npm模块时,索引文件的扩展名为.d.ts该文件如下所示node_modules/react-google-button/index.d.ts这导致Jest抛出

找不到模块“ react-google-button错误”

它在运行应用程序时起作用的原因是因为TypeScript在查找该文件类型方面没有任何问题,并且默认情况下在运行应用程序时会出现问题。

如果将名称更改为index.tsJest,则看到模块已加载没有问题。我可以在Google上看到,其他人已经多次遇到此问题,而他们不应使用给定的TypeScript来查看文件也没有问题。我这里只有一个假设,那就是玩笑和create-react-app之间的某种类型的配置问题。

  1. Jest看到该模块后,就会出现一个新问题。该库正在使用“ newish” import * as React from 'react';导入语句。开玩笑抛出了一个错误,

开玩笑遇到了意外的令牌

为了测试关于第二个问题的理论,我删除了react-google-button库并更新了material-ui中的import语句以供使用,

import * as React from 'react';

当我进行更改时,新的错误与意外的令牌错误完全相同,但现在是材料导入而不是react-google-button导入。

我再次假设这是Jest没有配置为处理该问题的问题。

要回答您的问题,我认为这两个都可以。问题是由Jest的配置和模块的方式引起的

  1. 命名index.d.ts文件。
  2. 导入React。