问题标签 [ts-jest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5447 浏览

typescript - 用玩笑模拟泛型函数

我尝试了很多方法来用玩笑来模拟一个通用函数,但都没有成功。这是我认为正确的方式:

在编译时它会抛出以下错误:

你能告诉我正确的方法吗?

谢谢

0 投票
1 回答
6378 浏览

typescript - 我应该把 index.d.ts 文件放在哪里?

我正在编写一个nodeJS 服务,它使用一堆没有@types 的npm 模块。

tsc 错误消息告诉我我需要添加 index.d.ts 文件,但它没有告诉我将它放在哪里。我的 helper.spec.ts 文件也导入了相同的模块,当使用 jest 运行时也无法检测到 index.d.ts

我将该文件与 tsconfig.json 一起放在我的根目录中,但它没有检测到它。我的文件和结构如下所示:

文件夹结构

tsconfig.json

索引.d.ts

包.json

tsc 和 jest 期望 index.d.ts 在哪里?

一些文章建议为每个模块创建一个 index.d.ts,例如./types/module-one/index.d.ts, ./types/module-two/index.d.ts./types/module-three/index.d.ts然后编辑 tsconfig.jsoncompilerOptions.typeRoots以包含./types文件夹。

但我只想有 1 个 index.d.ts 和所有声明。

当我编辑 tsconfig.jsoninclude以包含index.d.ts文件时,我发现 tsc 可以编译我的 src 文件夹中的文件。但是,当我运行 jest 时,它仍然抱怨我的模块 index.d.ts 丢失了。

编辑: 如果我删除了我的 tsconfig.json,那么 jest 将正确运行而不会抱怨缺少模块,但是我无法 tsc 构建我的 src 文件。

如果我保留 tsconfig.json,那么 tsc 将构建我的 src 文件,但 jest 会抱怨 module-one 未定义。

编辑2: 我发现如果我设置[jest.config.ts].globals.ts-jest.diagnostics = false了,那么错误就会消失并且我的所有测试都通过了!但我不认为这是正确的解决办法?

0 投票
1 回答
161 浏览

typescript - 如何在 Jest 的测试助手中包含测试 TypeScript 库?

我想在 ./src/index.tsx 中包含一个测试助手文件

但是因为该文件没有 .test.tsx 扩展名,所以它抱怨 jest 没有被定义。

我该如何解决?

0 投票
3 回答
9006 浏览

typescript - 在 JEST 中模拟 i18n 的 useTranslation 不起作用

我的反应组件使用来自 i18next 的翻译,我正在尝试使用 JEST 为它创建测试。但是,没有任何内容被翻译,我尝试在下面模拟 useTranslation 函数:

我究竟做错了什么?

0 投票
1 回答
364 浏览

javascript - 如何在 Meteor.methods 中使用 jest 测试块

我正在为我的流星项目写笑话测试。我正在尝试在 Meteor.methods 中测试代码,但我不确定如何使用 Jest 来测试。

在服务器端(也是 main.js),代码片段如下所示,

在 main.test.js 中,我写了类似的东西

但是会出现错误:

我读过一篇文章提到在文件中伪造流星。(https://blog.meteor.com/real-world-unit-tests-with-meteor-and-jest-3d557e84e84a),但我不确定这样如何解析 Meteor.call 或 Meteor.methods 等符号。

任何想法表示赞赏。

0 投票
3 回答
11911 浏览

reactjs - 如何使用 Typescript 将 jest.spyOn 与 React 函数组件一起使用

我正在使用 Typescript 和 hooks 开发一个 React 应用程序,并且我正在尝试使用 Enzyme 和 Jest 来测试功能组件。我无法使用 jest.spyOn 来测试我的组件中的方法。jest.spyOn 方法无法正确解析并在悬停时显示以下消息

““validateBeforeSave”类型的参数不能分配给“context”|“setState”|“forceUpdate”|“render”|“componentDidMount”|“shouldComponentUpdate”|“componentWillUnmount”|“componentDidCatch”|“ getSnapshotBeforeUpdate" | ... 6 更多 ... | "UNSAFE_componentWillUpdate"'.ts(2345)"

我试图将实例转换为“任何”-

这当然忽略了编译时的问题,但是测试会抛出一个运行时错误,即组件上不存在函数。

无法窥探 validateBeforeSave 属性,因为它不是函数;给定的未定义

我在这里想念什么?spyOn 如何与函数组件一起工作?

我使用 create-react-app 模板创建了应用程序,它具有测试包的这些依赖项

0 投票
0 回答
474 浏览

reactjs - Typescript + Jest:导入在 jest 与开发模式中是不同的

我目前正在尝试为使用 RCTooltip 的组件编写简单的测试:https ://github.com/react-component/tooltip

当我在浏览器中打开应用程序时,它会打印出以下内容:

但是,当我尝试运行此测试时:

它打印出来:

为什么进口不一样??

这是我的package.json

tsconfig.json

0 投票
1 回答
571 浏览

node.js - 为什么测试中的 spyOn 函数不能与 sendGrid 一起使用?

我正在使用 Typescript 设置一个带有graphql-yoga和 `prisma 的 graphql 服务器。当用户注册时,一封带有验证链接的电子邮件将被发送到给定的电子邮件地址。一切正常,但我想在重构功能之前为突变编写一个测试,检查 SendGrid 的“发送”函数是否已被调用。

我尝试用 监视函数jest.spyOn,但我得到的只是一个错误,这是因为在测试环境中没有为 SendGrid 提供 API 密钥。

我以前使用过 spyOn,它确实有效,尽管这是我第一次将 jest 与 Typescript 一起使用。

注册突变

尝试间谍

运行测试给了我:

错误:GraphQL 错误:未经授权

注释掉突变中的 send 函数调用并运行测试给了我:

错误:expect(spy).toHaveBeenCalled()

预期 spy 已被调用,但未调用。

0 投票
0 回答
719 浏览

reactjs - Jest 无法导入 ts/tsx 模块

当我尝试将打字稿模块导入我的单元测试时,我收到一条错误消息Unable to resolve path to module 'src/js/TestNum'。从 js/jsx 文件进行相同的导入没有相同的问题。

过去,当我在导入打字稿模块时遇到问题时,它会抱怨意外的令牌语法错误。

TestNum.ts

TestStr.js

测试.js

在 vscode 中,如果我单击失败的导入并按 F2,它将导航到导入的定义。

包.json

jest.config.js

编辑

src根据评论,我在玩弄之后发现的一件新事情是,如果我将测试切换为打字稿测试,那么如果从而不是相对路径引用,它将无法找到我的模块../../src。这也将防止 IDE 跳转到定义。

0 投票
1 回答
1264 浏览

typescript - 使用 ts-jest 和 webpack 允许 Jest 识别和解析模块别名需要什么?

我有一个.ts要测试的文件。

前端/游戏/index.ts

我要导入的文件index.tsfrontend/game/views/app.vue. Webpack-dev-server、eslint 和(我假设)ts-loader 都能够使用@别名解析模块导入,因为在我的构建或开发步骤中没有错误。

但是,当我运行 jest 时,出现以下错误:

它指的是我的file.spec.js文件的第一行:

前端/测试/游戏/模型/file.spec.js

我遵循了typescript模块解析文档的建议,以及专门关于设置 webpack/typescript/jest 项目的文章。

他们的建议通常围绕在 3 个地方设置别名:

  1. webpack 配置,在resolve.alias. 矿:

webpack.config.js

  1. Jest 配置,在moduleNameMapper. 矿:

package.json(我的笑话配置所在的位置)

  1. Typescript 配置,利用baseUrlpaths. 矿:

tsconfig.json

据我所知,我完全按照指示进行了操作。在 github 和 stackoverflow 上窥探之后,我没有发现我做错了什么,或者现在是否有一些错误。我已经尝试向导入添加.vue扩展,尝试各种路径实验组合(即从paths对象中删除“前端”,放置和替换路径前和路径后的斜杠等),并切换设置,例如esModuleInterop,无济于事。

如何让 Jest 识别我的模块别名?

编辑:令人着迷的是,//@ts-ignore在 import 语句之前立即添加会导致此错误“消失”,然后 jest 成功导入文件。

EDIT2: tsignore 步骤让我完全怀疑 jest 导入文件的能力.vue,所以我在 github 上的这个问题以及文件上的typescript 建议.vue中探讨了这一点。但是,我已经有一个vue-shims.d.ts与他们的建议相同的文件。只是为了实验,我把它复制到了整个应用程序,但无论我放在哪里,都没有效果。