fs.readFile
не возвращает обещание, поэтому await fs.readFile
не будет работать.
select
- это асинхронная функция, и она нене вернуть obj, поэтому expect(select('#company')).toHaveLength(1)
тоже не сработает.
Вы можете исправить первую точку, обернув fs.readFile
Обещанием (обратите внимание, что существуют и другие способыисправить это, например, используя promisify ):
const fs = require("fs");
async function select(selector) {
const obj = await new Promise((res, rej) => {
fs.readFile("./content.html", "utf8", function(err, data) {
if (err) rej(err);
regexForIds = new RegExp(/<([^\s]+).*?id="company".*?>(.+?)<\/\1>/gi);
matches = data.match(regexForIds);
const obj = {
length: matches.length,
};
res(obj);
});
});
return obj;
}
module.exports = select;
Чтобы исправить вторую точку, вам нужно немного изменить тест, добавив await
перед вызовом select
:
const select = require("./");
test("select supports ids", async () => {
expect(await select("#company")).toHaveLength(1);
});
Возможно, вам придется изменить расположение ./content.html
в зависимости от того, как вы выполняете свои тесты.