javascript - Nodejs 测试不会在 Promise 中出错

标签 javascript node.js promise jestjs supertest

所以我对 nodejs 和 promise 处理有点陌生,我想弄清楚我在这里做错了什么。

现在,当我运行这个测试时,我预计它会失败,并在 throw new Error 中显示错误消息,但测试通过了,然后只打印错误消息 Invalid: XXXXXXX 作为 UnhandledPromiseRejectionWarning 的一部分。

这是我的测试结果。当 valid 不是 true 时,如何使此测试失败?这个测试是 Jest 。我附上了测试通过的屏幕截图(当它应该失败时)。 enter image description here

const request = require('supertest');
const { verifyJsonResponse } = require('../verifiers/verifiers');

const Ajv = require('ajv');
const ajv = new Ajv({allErrors: true});
const assert = require('assert');

const baseURL = 'myAPIBaseUrl';
const endPointExtensions = ['myAPIExtension'];
const schema = require('./../pathToJsonSchema/schemaFile.json');

describe('runs remotely specified test cases', () => {
    it('should receive expected response for each parameter group', () => {
        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));
        });
    });
});

最佳答案

UnhandledPromiseRejectionWarning 出现,因为未处理 promise 拒绝。

Jest 本质上支持规范中的 promise 。为了让异步规范使用现有的 promise ,它应该从规范中返回:

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));
});

关于javascript - Nodejs 测试不会在 Promise 中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891907/

相关文章:

javascript - JavaScript 中的继承 : Calling parent's method

javascript - 同一数组中的 javascript 对象之间的一对一关系 (AngularJS)

javascript - Grunt - 同时执行和监视应用程序

javascript - 我违背了我的 promise

javascript - 异步完成后如何执行另一个功能?

javascript - 如何从嵌套 Promise 函数返回 Promise 对象

javascript - 探索 Rally 对象模型的最简单方法是什么?

javascript - 自动完成标签不显示隐藏元素上的数据

node.js - Sails Waterline 大文件 PostgreSQL

node.js - 如何确定 npm 包是否有可用的最新版本?