我知道我可以在测试中抛出错误,但我想知道是否有像Jasmine提供的全局def num_to_excel_col(n):
if n < 1:
raise ValueError("Number must be positive")
result = ""
while True:
if n > 26:
n, r = divmod(n - 1, 26)
result = chr(r + ord('A')) + result
else:
return chr(n + ord('A') - 1) + result
方法?
答案 0 :(得分:12)
你可以通过抛出错误来做到这一点。例如:
test('Obi-Wan Kenobi', () => {
throw new Error('I have failed you, Anakin')
})
答案 1 :(得分:6)
复制/面试失败:
it('This test will fail', done => {
done.fail(new Error('This is the error'))
})
答案 2 :(得分:3)
不要认为有,在这里讨论:https://github.com/facebook/jest/issues/2129
答案 3 :(得分:3)
这里有很多好主意。仅添加有关测试异步代码的额外信息(可能会导致尝试使Jest显式失败),请检查文档中的Testing Asynchronous Code
https://jestjs.io/docs/en/asynchronous
要测试返回已解决的Promise的函数,重要的是要返回Promise,因此Jest知道只有在Promise被解决或超时时才进行测试:
test('the data is peanut butter', () => {
return fetchData().then(data => {
expect(data).toBe('peanut butter')
})
})
要测试返回拒绝的Promise的函数,重要的是返回Promise,因此Jest知道只有在Promise被拒绝或超时时才进行测试。而且还必须说Jest需要计数多少个断言,否则如果Promise被解决,它不会失败-在这种情况下,这是错误的-
test('the fetch fails with an error', () => {
expect.assertions(1)
return fetchData().catch(e => expect(e).toMatch('some specific error'))
})
答案 4 :(得分:2)
您可以随时执行以下操作:)
expect(true).toBe(false);
答案 5 :(得分:1)
Jest实际上使用Jasmine,因此您可以像以前一样使用fail
。这是Jest的TypeScript声明文件中的定义:
declare function fail(error?: any): never;
通话示例:
fail('it should not reach here');
答案 6 :(得分:1)
添加 jest-fail-on-console npm 包,然后添加到 jest.config.js
import failOnConsole from 'jest-fail-on-console'
failOnConsole();
一旦由于测试项中抛出的错误或警告而出现控制台错误或 jest 发出的警告,这将使测试失败。
答案 7 :(得分:0)
在某些情况下,某些答案不起作用。在async-await
的世界中,像这样的try-catch逻辑很普遍。
try {
await someOperation();
} catch (error) {
expect(error.message).toBe('something');
}
现在想象一下,如果someOperation()
以某种方式通过了,但是您期望它失败,那么该测试将仍然通过,因为它从未进入过catch块。 所以我们要确保在someOperation没有引发错误的情况下测试失败。
所以现在让我们看看哪些解决方案将起作用,哪些将不起作用。
可接受的答案在这里行不通,因为将再次引发罚球。
try {
await someOperation();
throw new Error('I have failed you, Anakin');
} catch (error) {
console.log('It came here, and so will pass!');
}
带有true === false的答案也将不起作用,因为断言也会引发类似上面的错误,而该错误将被捕获。
try {
await someOperation();
expect(true).toBe(false); // This throws an error which will be catched.
} catch (error) {
console.log('It came here, and so will pass!');
}
下面是这种情况的一种可行的解决方案(如@WhatWouldBeCool的答案所示)。现在,它明显无法通过测试。
try {
await someOperation();
fail('It should not have come here!')
} catch (error) {
console.log('It never came here!');
}