如何测试节点的fs.watch()?

时间:2019-10-16 17:23:50

标签: javascript node.js jestjs

我有一个使用fs.watch的函数。下面的示例。

function listenToFileChange() {
  fs.watch(fileLocation, "utf-8", async function(event, fileName) {
    if (event === "change") {
      dbUp.push(fileName, function() {});
    }
  });
}

我正在尝试用玩笑来测试;但我不清楚如何正确执行。可能存在循环。

jest.mock("loadBaselineFile", () => jest.fn());

describe("Tests listenToFileChange", () => {
  test(`GIVEN endpoint /info
        WHEN make a request and database and data loader are healthy 
        THEN return an answer with status: pass, statusCode: 200, type:application/health+json`, async () => {
    listenToFileChange();
    fs.writeFileSync(
      `dataLoader/1.json`,
      "{id: '1', amount: '12'}",
      "utf8"
    );
    expect(loadBaselineFile.mock.calls.length).toBeCalledWith(1);
  });

}); 

有人可以帮助我了解如何正确测试此方法,并确保我的测试性能良好。

1 个答案:

答案 0 :(得分:0)

您需要回调:

function listenToFileChange(cb) {
  fs.watch(fileLocation, "utf-8", async function(event, fileName) {
    if (event === "change") {
      dbUp.push(fileName, cb);
    }
  });
}

因此,更改文件后,您可以在测试中注意到它:

listenToFileChange(()=>{
   changed = true;
   // done();
});

由于这是测试异步函数,因此您需要调用“ done();”之类的东西。活动启动时。 如果未调用“ done()”,则测试超时将使其失败。