Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 esbuild-jest 的问题 #503

Closed
yimingjfe opened this issue Jan 18, 2022 · 5 comments
Closed

使用 esbuild-jest 的问题 #503

yimingjfe opened this issue Jan 18, 2022 · 5 comments

Comments

@yimingjfe
Copy link
Member

yimingjfe commented Jan 18, 2022

版本信息

最新版本

问题详情

现在使用 esbuild-jest 会显著加快我们 CI 的运行速度,但是使用下来有下面两个问题。

问题一
esbuild-jest 导致 jest 统计的覆盖率不准确。
以 plugin-express 为例, 当使用 esbuild-jest 时;显示覆盖率如下:
image

可以看到报告中 plugin.ts 45、120 行是未执行的,但看相关代码可以发现 45,120 行其实是空行。
使用 ts-jest 时,显示覆盖率如下;这里展示的 Uncovered Line 是准确的。

image
从上面可以看出 esbuild-jest 统计的测试覆盖率偏差还是挺大的,所以图片中 60% 的覆盖率是不准确的。因为开了 codecov 校验;现在不好跑通 CI;codecov 的报告也无指导意义。

问题二
esbuild-jest 与 ts 默认行为有些不一致

plugin-testing 中有一个测试用例( index.test.ts ) 如下:

image

因为这里 src 中的代码没有默认导出,tsconfig 中也未做配置;所以可以看到 vscode 中是有提示报错。但使用 esbuild-jest 的时候是可以跑通测试用例的;使用 ts-jest 才会报错。

现在 esbuild-jest 最主要的问题是会影响合码。目前 CI 的短板在集测,这里建议暂时先使用 ts-jest 跑单测;对 CI 整体速度影响应该不大。

问题复现

modern.js 仓库就可以复现

@chenhuang444
Copy link
Contributor

esbuild-jest还有一个问题,如果使用jest.mock,则测试文件无法使用Typescript类型来标记字段。目前似乎没有什么好的解决办法
aelbore/esbuild-jest#57

@yimingjfe
Copy link
Member Author

问题一添加 sourcemap 配置可以以解决,性能上影响非常小(plugin-express 差距在 1s 以内);我修改下。

  transform: {
    '\\.[jt]sx?$': [
      require.resolve('esbuild-jest'),
      {
        sourcemap: true,
      },
    ],
  }

@leeight
Copy link
Member

leeight commented Jan 18, 2022

因为这里 src 中的代码没有默认导出,tsconfig 中也未做配置;所以可以看到 vscode 中是有提示报错。但使用 esbuild-jest 的时候是可以跑通测试用例的;使用 ts-jest 才会报错。

这个是我手误,应该可以提前发现这个错误的。

@yimingjfe
Copy link
Member Author

因为这里 src 中的代码没有默认导出,tsconfig 中也未做配置;所以可以看到 vscode 中是有提示报错。但使用 esbuild-jest 的时候是可以跑通测试用例的;使用 ts-jest 才会报错。

这个是我手误,应该可以提前发现这个错误的。

这种错误不应该由人去预防,比较担心的是使用 esbuild-jest 导致我们源码中的错误没有暴露出来。

这个 issue 暂时先不关闭,后续如果有关于 esbuild-jest 的问题,可以记录到这个 issue 下。

@chenjiahan
Copy link
Member

这个 issue 先 close 咯,esbuild-jest 目前的维护频率很低,后续我们应该会考虑迁移到 @swc/jest 或 vitest 上

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants