繁体   English   中英

开玩笑 - 尝试捕捉单元测试失败

[英]Jest - try catch unit test fails

我在使用 jest 创建单元测试时遇到问题。

exportMyData.js

const createJobTrasferSetArray = async () => {
  const data = exportData();
  const jobTransferSet = [];

  try {
    data.forEach((element) => {
      const JobPathArray = element.JobPath.split(/[,\r\n]+/)
        .filter((JobPathElement) => JobPathElement !== '');

      // Create an object
      const jobTransferSetObj = {
        coworkerID: element.CoworkerID,
        jobPath: JobPathArray,
      };
      jobTransferSet.push(jobTransferSetObj);
    });
    return jobTransferSet;
  } catch (e) {
   console.error(`Coldn't create jobTransferSet Array: ${JSON.stringify(e)}`);
return e;
  }
};

exportMyData.test.js

const exportData = require('./exportMyData');

describe('Read data from Excel and creat formated json output', () => {
//Test passed through
  it('convert read data from Excel to an array', async () => {
    mockedJobTransferSetRaw.mockReturnValue(jobTrasfarSetRaw);
    const result = await exportData.createJobTrasferSetArray();
    expect(result[0].coworkerID).toEqual(jobTransferSetArray[0].coworkerID);
    expect(result[0].jobPath).toEqual(jobTransferSetArray[0].jobPath);
    expect(result).not.toBeNull();
  });
  //Test fails
  it('Error on convert to an array', async () => {
    try {
    const result = await exportData.createJobTrasferSetArray();
    result.mockRejectedValue(new Error('something went wrong'));
    } catch (error) {
      expect(error.message).toEqual('Error: something went wrong');
    }
  });
});

我知道我的 tst 案例有问题,但我无法找出解决方案。 请帮忙!

首先,您应该尽可能避免在单元测试中使用 try/catch(作为最佳实践)。 你总是可以使用 jest 的助手:

    await expect(class.method(param)).rejects.toThrow();
    await expect(async () => class.method(param1, param2)).rejects.toThrow(Exception);

其次,你的尝试是空的,它怎么会捕捉到什么都没有做?

所以这:

    try {
    } catch (error) {
      expect(error.message).toEqual('Error: something went wrong');
    }

应该变成这样:

    try {
    // call some methods, do something...

    } catch (error) {
      expect(error.message).toEqual('Error: something went wrong');
    }

如果你想进一步 go,你甚至不需要 try/catch 部分,但我会先修复那个空的 try/catch。

如果我是正确的,这是调用一个会抛出异常的方法

    const result = await exportData.createJobTrasferSetArray();
    result.mockRejectedValue(new Error('something went wrong'));

我不完全确定您打算在那里做什么,但似乎您尝试了 mocking 您的方法在调用后返回? 也许分享一些它的逻辑,以便我们可以更好地帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM