hellof2e / quark-core

Open-source, Web Components engine designed for everyone.(用原生 JS 构建跨技术栈组件 / 无框架组件)
https://quark-ecosystem.github.io/quarkc-docs/#/
MIT License
343 stars 29 forks source link

编译后的 quarkc 模块会导致单元测试加载失败 #92

Closed OSpoon closed 3 months ago

OSpoon commented 3 months ago

描述

编译后的 quarkc 模块会导致单元测试加载失败,通过源码导入可以正常执行。

目标

使用编译后的 quarkc 可以正常运行单元测试。

步骤:

  1. 拉取quark-core源码: git clone https://github.com/hellof2e/quark-core.git
  2. 安装依赖并构建core模块:pnpm i && cd packages/core && pnpm pnpm build
  3. 将待测试组件中 QuarkElementcustomElement 指向 "../../lib" (构建输出目录)
  4. 运行 pnpm test

截图:

image

PS:

我将 web-component-development 的依赖版本升级到最新后发现了这个问题,quarkc@1.0.58 版本是没有问题的。

OSpoon commented 3 months ago

@dyf19118,hi~,为什么会需要 isBrowserOnly 选项,并且在输出 index.js 时,选择了关闭呢?

image
dyf19118 commented 3 months ago

@dyf19118,hi~,为什么会需要 isBrowserOnly 选项,并且在输出 index.js 时,选择了关闭呢? image

输出的默认入口index.js是支持在有编译的环境下使用的。

dyf19118 commented 3 months ago

无编译环境用index.browser.js

dyf19118 commented 3 months ago

我看web-component-development这个包升级了quarkc的版本,但是没有处理单元测试runner的配置,runner运行时需要定义下process.env.NODE_ENV全局变量。

dyf19118 commented 3 months ago

具体可以参考quark-core工程下的单元测试

OSpoon commented 3 months ago

hi~,@dyf19188, 按照我提供的步骤执行 quark-core 中的单元测试同样会收到找不到 process 的错误提示,我尝试过将 quark-core 中的单元测试移植到 web-component-development 但是失败了。

OSpoon commented 3 months ago

这是我在 quark-core 基础上剥离出来的单测部分,正如我的疑问一样,单元测试在加载编译后的 quarkc 模块会导致加载失败。 PS:https://github.com/OSpoon/quark-core-test.git

dyf19118 commented 3 months ago

hi~,@dyf19188, 按照我提供的步骤执行 quark-core 中的单元测试同样会收到找不到 process 的错误提示,我尝试过将 quark-core 中的单元测试移植到 web-component-development 但是失败了。

有些许差异。在quark-core中单元测试是直接引用的源码而非产物。你发给我的仓库是直接引用的打包后的作为入口文件的产物,这个文件默认情况下是需要工作在有编译环境的——无论是webpack还是vite等等。而单元测试工具默认不会处理process全局变量,你可以参考下 https://modern-web.dev/guides/dev-server/using-plugins/#rollup-replace-plugin 这篇文章的做法。我已经把你仓库拉下来做修改测试过了。 QQ截图20240719002221

OSpoon commented 3 months ago

Great~,Thanks for your help, my unit tests are running normally.