黄老师,这样的写法是否会存在隐患?
来源:12-8 请求模块单元测试 jasmine-ajax + 测试代码编写

Dolly_Zhang
2020-06-23
黄老师,今天学写request.spec.ts时发现:
Case 1:
describe('request', () => {
beforeEach(() => {
jasmine.Ajax.install()
})
afterEach(() => {
jasmine.Ajax.uninstall()
})
test('should treat single string arg as url', () => {
axios('/foo')
return getAjaxRequest().then(request => {
expect(request.url).toBe('/foo123') // 错误应被捕获
expect(request.method).toBe('GET')
})
})
错误如预期般被捕获:
Case 2:
describe('request', () => {
beforeEach(() => {
jasmine.Ajax.install()
})
afterEach(() => {
jasmine.Ajax.uninstall()
})
test('should resolve when validateStatus returns true', () => {
const resolveSpy = jest.fn((res: AxiosResponse) => {
return res
})
const rejectSpy = jest.fn((e: AxiosError) => {
return e
})
axios('/foo', {
validateStatus(status) {
return status === 500
}
})
.then(resolveSpy)
.catch(rejectSpy)
.then(next)
return getAjaxRequest().then(request => {
request.respondWith({
status: 500
})
})
function next(res: AxiosResponse | AxiosError) {
expect(resolveSpy).toHaveBeenCalled()
expect(rejectSpy).not.toHaveBeenCalled()
expect(res.config.url).toBe('/foo123') // 错误应该被捕获
}
})
})
发现错误未被Jest捕获,Jest提示Tests Suites& Tests all passed. 倒是Node的unhandledRejection事件监听到了未捕获的reject错误,并提示UnhandledPromiseRejectionWarning
如果terminal输出多,不仔细在看,还真可能漏掉错误呢。黄老师这是不是会存在隐患?好像在异步测试中,expect放在被return的Promise对象的then方法里是最保险的?
写回答
1回答
-
说过了呀,异步需要 return Promise 或者用 done 函数
012022-01-12
相似问题