簡體   English   中英

帶回調的單元測試異步功能

[英]Unit testing async function with callback

嘗試編寫使用readFile函數讀取json文件的單元測試,但出現錯誤:超時-在jest.setTimeout指定的5000ms超時內未調用異步回調。 模擬json文件時,我一定做錯了。

功能:

function jsonReader(filePath, cb) {
  fs.readFile(filePath, (err, fileData) => {
    if (err) {
      return cb && cb(err);
    }
    try {
      const object = JSON.parse(fileData);
      return object;
    } catch (err) {
      return cb && cb(err);
    }
  });
}
module.exports = jsonReader;

然后是測試文件:

const jsonReader = require('.././ReadJson');
jest.mock('fs', () => {
  const MOCK_FILE_INFO = { 'test.json': JSON.stringify({ name: 'myname' }) };
  return {
    readFile: (fpath, opts) => {
      if (fpath in MOCK_FILE_INFO) {
        return MOCK_FILE_INFO[fpath];
      }
    }
  };
});


test('Test file', (done) => {
  function callback(data) {
    expect(data.name).toBe('myname');
    done();
  }

  jsonReader('test.json', callback);
});

我試圖更改超時時間,但是如果我將超時時間設置得更高一些,則執行也將花費更長的時間,並且仍然出現相同的錯誤。

您正在嘗試同步使用功能嗎?

jest.mock('fs', () => {
  const MOCK_FILE_INFO = { 'test.json': JSON.stringify({ name: 'myname' }) };
  return {
    readFile: (fpath, callback) => {
      if (fpath in MOCK_FILE_INFO) {
        callback(null, MOCK_FILE_INFO[fpath]);
      }
    }
  };
});
function jsonReader(filePath, cb) {
  fs.readFile(filePath, (err, fileData) => {
    if (err) {
      return cb && cb(err);
    }
    try {
      const object = JSON.parse(fileData);
      cb(object);
    } catch (err) {
      return cb && cb(err);
    }
  });
}
module.exports = jsonReader;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM