Javascript Nodejs测试未在承诺内出错
所以我对nodejs和promise处理有点陌生,我试图找出我在这里做错了什么 现在,当我运行此测试时,我预计它会失败,并出现Javascript Nodejs测试未在承诺内出错,javascript,node.js,promise,jestjs,supertest,Javascript,Node.js,Promise,Jestjs,Supertest,所以我对nodejs和promise处理有点陌生,我试图找出我在这里做错了什么 现在,当我运行此测试时,我预计它会失败,并出现抛出新错误中的错误消息,但测试通过,然后只是打印错误消息无效:XXXXXXX,作为未处理PromisejectionWarning的一部分 下面是我的测试结果。如果有效不是真,如何使此测试失败?这个测试是开玩笑的。我附上了测试通过的截图(当它应该失败时) 出现未处理的PromisejectionWarning,因为承诺拒绝未处理 Jest本质上支持规范中的承诺。为了让异步
抛出新错误
中的错误消息,但测试通过,然后只是打印错误消息无效:XXXXXXX
,作为未处理PromisejectionWarning
的一部分
下面是我的测试结果。如果有效
不是真
,如何使此测试失败?这个测试是开玩笑的。我附上了测试通过的截图(当它应该失败时)
出现未处理的PromisejectionWarning,因为承诺拒绝未处理 Jest本质上支持规范中的承诺。为了让异步规范利用现有的承诺,应该从规范中返回:
it('should receive expected response for each parameter group', () => {
return request(baseURL).get(endPointExtensions[0]).then((res) => {
const validate = ajv.compile(schema);
const valid = validate(res.body);
if (valid) console.log('Valid!');
else throw new Error('Invalid: ' + ajv.errorsText(validate.errors));
});
});
或:
您的测试框架如何支持异步测试?正如Bergi提到的,根本原因是异步流:首先您的测试通过了,然后承诺才得到了满足(无论当时是解决还是拒绝),代码看起来像是基于Jasmine的。对于Jasmine来说,这是我们刚刚构建的一个新框架,因此它目前不支持异步测试。是否有一个简单的方法来实现这段代码,或者有一个我可以使用的变通方法?很高兴它有帮助。
it('should receive expected response for each parameter group', () => {
return request(baseURL).get(endPointExtensions[0]).then((res) => {
const validate = ajv.compile(schema);
const valid = validate(res.body);
if (valid) console.log('Valid!');
else throw new Error('Invalid: ' + ajv.errorsText(validate.errors));
});
});
it('should receive expected response for each parameter group', async () => {
const res = await request(baseURL).get(endPointExtensions[0]);
const validate = ajv.compile(schema);
const valid = validate(res.body);
if (valid) console.log('Valid!');
else throw new Error('Invalid: ' + ajv.errorsText(validate.errors));
});