在我的 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
运行check
npm 脚本。通过手动运行它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();
}