0

在我的 monorepo 中,我使用 esbuild 快速运行测试,npx jest --watch但是当我将tsc命令添加到运行的测试集中时,手表控制台挂起并变得无响应。

我想tsc并行运行,以便最终在测试结果迅速报告几秒钟后收到编译器错误通知(esbuild 跳过打字稿类型并仅运行 javascript)。

我在没有手表的情况下并行生成tsc的方法,但我无法让它与--watch. 它会导致与 关联的交互式终端挂起jest --watch,可能与stdio:"inherit". 但是,如果没有 stdio 选项,我看不到输出。

我错过了什么?

我的顶层jest.config.js目前看起来像这样,它针对 monorepo 中的三个不同的测试套件。它适用于--watch. 我可以使用交互式控制台以这种方式运行和重新运行测试......

module.exports = {
  projects: [
    "<rootDir>/modules/task-editor-logic",
    "<rootDir>/modules/express-vault",
    "<rootDir>/modules/vault-memory",
    // {
    //   globalTeardown: "./check.js",
    // },
  ],
  reporters: ["default", "jest-summary-reporter"],
};

一个check脚本在 package.json 中声明为简单的"check": "tsc". I can uncomment the code above to run the globalTeardown` 任务,它会导致为测试套件的每次运行运行检查。

拆解任务的来源如下。如果代码编译成功,则正确成功,否则失败。

手动运行它从控制台成功node check.js运行checknpm 脚本。通过手动运行它npx jest也可以(它globalTeardown作为测试项目运行)。开玩笑的运行完成并按您的预期返回。

但是,通过运行它npx jest --watch会导致挂起,并且交互式运行器的控制台变得无响应,需要 CTRL+C 来杀死它。

是否有某种方法可以调用与线束和 ttypnpm run check配合得更好的 shell 命令?jest --watch

// check.js
const util = require("util");
const promiseExecSync = util.promisify(require("child_process").execSync);

async function runCheck() {
  return promiseExecSync("pnpm run check", { stdio: "inherit" });
}

module.exports = runCheck;

if (require.main === module) {
  runCheck();
}
4

0 回答 0