如何在 NodeJS 中测试工作线程?

问题描述 投票:0回答:1

我有一个使用工作线程的节点脚本。我想用 Jest 来测试一下。该文件被调用,但代码从未执行。

这是调用worker的函数:

// index.ts 
function foo(){
  const worker = new Worker(path.resolve(__dirname, "./worker.ts"));
  worker.on("message", (e) => {
   // do stuff
  });
}

这是工人:

// worker.ts
const { parentPort } = require("worker_threads");
const { doStuff } = require("./index");

parentPort?.on("message", async (e) => {
    const data = await doStuff(e);
    parentPort?.postMessage({ data });
 }
);

我做错了什么?我试图用 Jest 来嘲笑 Worker,但它没有被调用。在使用它之前,我还尝试将

worker.ts
编译为
worker.js
文件。

node.js testing jestjs worker-thread node-worker-threads
1个回答
0
投票

问题是你的代码陷入僵局哈哈。您的主线程(

index.ts
)正在等待来自子线程的消息,而您的子线程(
worker.ts
)也在执行主线程中的逻辑之前等待来自主线程的消息。您需要从主线程触发此执行。

为此,请将其添加到您的

index.ts
代码

worker.postMessage("some data");

这将广播一条新消息,该消息将由您的子线程接收,从而执行

doStuff
并将消息发送回您的主线程

© www.soinside.com 2019 - 2024. All rights reserved.