जेस्ट परीक्षण विफल हो रहा है। मैचर त्रुटि: प्राप्त मूल्य में एक लंबी संपत्ति होनी चाहिए जिसका मूल्य एक संख्या होना चाहिए

Received has type:  object
Received has value: {}

लेकिन वस्तु का एक मूल्य है और यह {} नहीं है

Index.js फ़ाइल

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 फ़ाइल

const select = require('./');
test('select supports ids', () => {
  expect(select('#company')).toHaveLength(1);
});
1
learner 4 अक्टूबर 2019, 20:29

1 उत्तर

सबसे बढ़िया उत्तर
  • fs.readFile कोई वादा नहीं लौटाता, इसलिए await fs.readFile काम नहीं करेगा।

  • select एक async फ़ंक्शन है और यह कोई obj नहीं लौटाता है, इसलिए expect(select('#company')).toHaveLength(1) भी काम नहीं करेगा।

आप पहले बिंदु को fs.readFile को एक वादे के साथ लपेट कर ठीक कर सकते हैं (ध्यान दें कि इसे ठीक करने के अन्य तरीके भी हैं, जैसे वादा करना):

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;

दूसरे बिंदु को ठीक करने के लिए, आपको select को कॉल करने से पहले await जोड़कर परीक्षण को थोड़ा बदलना होगा:

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

आप अपने परीक्षण कैसे चलाते हैं, इसके आधार पर आपको संभवत: ./content.html का स्थान बदलना होगा।

0
El Aoutar Hamza 4 अक्टूबर 2019, 22:21