我正在尝试使用Jest测试try catch块。 E.g。
// filename: foo.js
const foo = () => {
let js = 'somejs'
try {
eval(js)
} catch (e) {
document.location = 'redirect/to/page'
return false
}
return true
}
export default foo
你是否模仿eval
(不是我选择使用eval。这是我的老板代码)然后让它扔掉?如果是这样,你会怎么做?例如。
eval = jest.fn() // doesn't work
所以测试代码可能是:
// filename: foo.spec.js
import foo from './foo'
eval = jest.fn()
describe('foo', () => {
describe('when eval succeeds', () => {
it('performs an eval', {
const result = foo()
expect(result).toEqual(true)
})
describe('when eval fails', () => {
beforeEach(() => {
eval.mockImplementation(() => {throw 'error'})
})
it('catches the error and redirects', () => {
const result = foo()
expect(result).toEqual(false)
})
})
})
模拟和测试代码是什么样的?