【问题标题】:Jest unit testing a function throwing errorJest 单元测试函数抛出错误
【发布时间】:2020-07-31 18:47:28
【问题描述】:

我试图对节点中的一个函数进行单元测试,该函数在任何情况下都会引发错误。这是我的节点函数定义。

public testFunction() {
    throw new Error('Test Error');
}

正如你所见,这个函数在被调用时总是抛出一个错误。我尝试使用 jest .toThrow(error?) 方法对此函数执行单元测试。我无法按预期对函数进行单元测试。

下面提到的是我编写的测试用例,并附上了我在执行时遇到的错误的屏幕截图。

测试用例 #1

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(testClass.testFunction()).toThrow();
});

测试用例 #2

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(testClass.testFunction).toThrow();
});

测试用例 #3

来自this博客,有人提到

如果我们希望函数在某些情况下抛出异常 输入参数,关键是我们必须传入一个函数 定义而不是在期望中调用我们的函数。

所以我将我的测试用例更新为

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(() => testClass.testFunction()).toThrow();
});

但它会抛出类似的错误

我的实施有什么问题?对抛出错误对象的函数进行单元测试的正确方法是什么?

【问题讨论】:

    标签: javascript node.js unit-testing jestjs


    【解决方案1】:

    你在第三次尝试时就做对了。唯一的问题是您在测试定义中包含了done 回调。这告诉测试它是异步的,它希望您在测试完成后调用done 回调。

    由于您的测试不是异步的,因此只需删除测试定义中的 done 回调即可:

    it('Should throw test error', () => {
        const testClass = TestClassService.getInstance();
        expect(() => testClass.testFunction()).toThrow();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2016-10-05
      相关资源
      最近更新 更多