Как проверить узел fs.watch ()? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть функция, которая использует fs.watch. Пример ниже.

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

Я пытаюсь проверить это с помощью jest;но мне непонятно, как это сделать правильно. Существует вероятное зацикливание.

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 голосов
/ 16 октября 2019

Вам нужен обратный вызов:

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 ()» не вызывается, тайм-аут теста приведет к сбою.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...