Nodejs 测试不会在 Promise 中出错
Nodejs Test not erroring out inside Promise
所以我对 nodejs 和承诺处理有点陌生,我想弄清楚我在这里做错了什么。
现在,当我 运行 这个测试时,我预计它会失败并在 throw new Error
中显示错误消息,但测试通过了,然后只打印错误消息 Invalid: XXXXXXX
作为一部分一个 UnhandledPromiseRejectionWarning
。
这是我的测试结果。当 valid
不是 true
时,如何使此测试失败?这个测试开玩笑运行。我附上了测试通过的屏幕截图(当它应该失败时)。
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 本质上支持规范中的承诺。为了让异步规范使用现有的承诺,它应该从规范中返回:
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));
});
所以我对 nodejs 和承诺处理有点陌生,我想弄清楚我在这里做错了什么。
现在,当我 运行 这个测试时,我预计它会失败并在 throw new Error
中显示错误消息,但测试通过了,然后只打印错误消息 Invalid: XXXXXXX
作为一部分一个 UnhandledPromiseRejectionWarning
。
这是我的测试结果。当 valid
不是 true
时,如何使此测试失败?这个测试开玩笑运行。我附上了测试通过的屏幕截图(当它应该失败时)。
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 本质上支持规范中的承诺。为了让异步规范使用现有的承诺,它应该从规范中返回:
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));
});