jest test в node.js не удается показать ошибку Matcher - PullRequest
0 голосов
/ 04 октября 2019

Jest тест не пройден. Ошибка сопоставления: полученное значение должно иметь свойство длины, значение которого должно быть числом

Received has type:  object
Received has value: {}

, но у объекта есть значение, и оно не является {}

index.js file

const fs = require('fs');

select('company')

async function select(selector)   {

await fs.readFile('./content.html', 'utf8',    function (err, data) {
 if (err) throw err;

 regexForIds = new RegExp(/<([^\s]+).*?id="company".*?>(.+?)<\/\1>/gi);

 matches = data.match(regexForIds);

 const obj = {
   length:  matches.length
 };

 return obj

});

}

module.exports = select;

index.js file

const select = require('./');
test('select supports ids', () => {
  expect(select('#company')).toHaveLength(1);
});

1 Ответ

0 голосов
/ 04 октября 2019
  • 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 в зависимости от того, как вы выполняете свои тесты.

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