Javascript Nodejs测试未在承诺内出错

Javascript Nodejs测试未在承诺内出错,javascript,node.js,promise,jestjs,supertest,Javascript,Node.js,Promise,Jestjs,Supertest,所以我对nodejs和promise处理有点陌生,我试图找出我在这里做错了什么 现在,当我运行此测试时,我预计它会失败,并出现抛出新错误中的错误消息,但测试通过,然后只是打印错误消息无效:XXXXXXX,作为未处理PromisejectionWarning的一部分 下面是我的测试结果。如果有效不是真,如何使此测试失败?这个测试是开玩笑的。我附上了测试通过的截图(当它应该失败时) 出现未处理的PromisejectionWarning,因为承诺拒绝未处理 Jest本质上支持规范中的承诺。为了让异步

所以我对nodejs和promise处理有点陌生,我试图找出我在这里做错了什么

现在,当我运行此测试时,我预计它会失败,并出现
抛出新错误
中的错误消息,但测试通过,然后只是打印错误消息
无效: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));
});