2017-09-04 39 views
3

我正在处理一些代码,我需要测试函数引发的异常类型(它是TypeError,ReferenceError等)。如何在Jest中测试引发异常的类型

我目前的测试框架是AVA,我可以测试它作为第二个参数t.throws方法,喜欢这里:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => { 
    const error = t.throws(() => { 
    throwError(); 
    }, TypeError); 

    t.is(error.message, 'UNKNOWN ERROR'); 
}); 

我开始重写我的测试,以开玩笑,找不到如何轻松地做到这一点。它甚至有可能吗?

回答

2

还没有尝试过,但我会建议使用Jest的toThrow声明。所以我想你的例子看起来像这样:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => { 
    const error = t.throws(() => { 
    throwError(); 
    }, TypeError); 

    expect(t).toThrowError('UNKNOWN ERROR'); 
    //or 
    expect(t).toThrowError(TypeError); 
}); 

再次,没有测试它,但我认为它应该工作。

让我知道这是否有帮助。

快乐编码!

2

Jest有一个方法toThrow(error)来测试函数在被调用时抛出。

所以,你的情况,你应该把它叫做这么:

expect(t).toThrowError(TypeError); 

The docs

2

开玩笑,你有一个函数传递到期望(功能).toThrow(空白或错误​​的类型)。

例子:

test("Test description",() => { 
    const t =() => { 
    throw new TypeError(); 
    }; 
    expect(t).toThrow(TypeError); 
}); 

如果你需要测试现有的功能是否符合一组参数,罚球,你有希望把它包起来匿名函数内()。

实施例:

test("Test description",() => { 
    expect(() => {http.get(yourUrl, yourCallbackFn)}).toThrow(TypeError); 
}); 
相关问题