【问题标题】:Jest: How to properly test console.error/console.warn with toThrowError?开玩笑:如何使用 toThrowError 正确测试 console.error/console.warn?
【发布时间】:2021-03-12 01:09:36
【问题描述】:

如何测试我的函数calculateAverage 在传递空数组时会抛出错误(console.error)?

我正在使用 Jest 进行测试,但无法使用 .toThrowError

calculateAverage.test.tsx:

// Imports: File
const { calculateAverage } = require('../calculateAverage');

// Calculate Average
describe('calculateAverage', () => {
  // Empty Array
  test('Throw Error on empty array', () => {
    expect(calculateAverage([])).toThrowError('Error: Empty Array (calculateAverage)');
  });

  // Test #1
  test('Test #1', () => {
    expect(calculateAverage([1, 2, 3])).toEqual(2);
  });

  // Test #2
  test('Test #2', () => {
    expect(calculateAverage([0, 2, 4, 6, 8, 10])).toEqual(5);
  });
});

calculateAverage.tsx:

// Helper Function: Calculate Average
export const calculateAverage = (array: Array<number>) => {
  // Check If Data Exists
  if (array.length >= 1) {
    // Total
    let total: number = 0;

    // Iterate Over Array
    let i: number = 0;
    while (i < array.length) {
      // Add To Total
      total += array[i];

      // Increase I
      i++;
    }

    return total / array.length;
  }
  else {
    // Error
    console.error('Error: Empty Array (calculateAverage)');
  }
};

【问题讨论】:

    标签: typescript unit-testing testing jestjs


    【解决方案1】:

    您应该throw 错误,而不是使用console.error 打印错误。

    此外,来自.toThrow(error?) 文档:

    注意:你必须将代码包装在一个函数中,否则错误不会被捕获,断言会失败。

    例如

    calculateAverage.ts:

    export const calculateAverage = (array: Array<number>) => {
      // Check If Data Exists
      if (array.length >= 1) {
        // Total
        let total: number = 0;
    
        // Iterate Over Array
        let i: number = 0;
        while (i < array.length) {
          // Add To Total
          total += array[i];
    
          // Increase I
          i++;
        }
    
        return total / array.length;
      } else {
        // Error
        throw new Error('Error: Empty Array (calculateAverage)');
      }
    };
    

    calculateAverage.test.ts:

    const { calculateAverage } = require('./calculateAverage');
    
    // Calculate Average
    describe('calculateAverage', () => {
      // Empty Array
      test('Throw Error on empty array', () => {
        expect(() => calculateAverage([])).toThrowError('Error: Empty Array (calculateAverage)');
      });
    
      // Test #1
      test('Test #1', () => {
        expect(calculateAverage([1, 2, 3])).toEqual(2);
      });
    
      // Test #2
      test('Test #2', () => {
        expect(calculateAverage([0, 2, 4, 6, 8, 10])).toEqual(5);
      });
    });
    

    单元测试结果:

     PASS  src/stackoverflow/65068033/calculateAverage.test.ts (13.57s)
      calculateAverage
        ✓ Throw Error on empty array (13ms)
        ✓ Test #1 (3ms)
        ✓ Test #2 (1ms)
    
    Test Suites: 1 passed, 1 total
    Tests:       3 passed, 3 total
    Snapshots:   0 total
    Time:        14.785s
    

    【讨论】:

    • 感谢您的帮助和澄清!!
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2018-09-01
    • 2020-02-06
    • 2020-03-25
    相关资源
    最近更新 更多