javascript - Chai Expect 断言错误不可捕获
问题描述
我想在 NodeJS 代码中运行几个测试来测试 API 端点的可用性。不是通过执行“npm run test”而是在常规代码中。
但是当使用 Chai.Expect 时,它会忽略 Try/Catch 块,引发错误并使程序崩溃。
以下代码是我使用的:
run_test2.js
const {alive} = require('../test/alive');
try {
alive();
} catch(error) {
console.log('Catching the error:', error);
}
alive.js,实际测试
const supertest = require('supertest');
var expect = require('chai').expect
const constants = require('../lib/constants');
module.exports.alive = () => {
try {
supertest(constants.api.base)
.get('/dbg/getdbsample')
.end((err, res) => {
if (err) {
console.log("ERROR: ", err);
}
// if (res.statusCode !== 200) {
// console.log('ERROR...:', res.statusCode);
// }
expect(res.statusCode).to.equal(200)
})
} catch (error) {
console.log('Catching the error in Alive.js:', error);
}
}
请注意,constants.api.base/dbg/getdbsample 处的 API 已关闭,未运行。
因此,预计会出现 500 错误。
输出
$ node run_test2.js
/Users/bert/Project/testing-framework/node_modules/chai/lib/chai/assertion.js:152
throw new AssertionError(
^
AssertionError: expected 500 to equal 200
at Test.<anonymous> (/Users/bert/Project/testing-framework/src/test/alive.js:44:43)
at Test.assert (/Users/bert/Project/testing-framework/node_modules/supertest/lib/test.js:209:6)
at localAssert (/Users/bert/Project/testing-framework/node_modules/supertest/lib/test.js:159:12)
at /Users/bert/Project/testing-framework/node_modules/supertest/lib/test.js:156:5
at Test.Request.callback (/Users/bert/Project/testing-framework/node_modules/superagent/lib/node/index.js:905:3)
at /Users/bert/Project/testing-framework/node_modules/superagent/lib/node/index.js:1127:20
at IncomingMessage.<anonymous> (/Users/bert/Project/testing-framework/node_modules/superagent/lib/node/parsers/json.js:22:7)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (internal/streams/readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
showDiff: true,
actual: 500,
expected: 200,
operator: 'strictEqual'
}
没有触发 Catch,因为我没有在 Catch 中获得任何 console.logs。
活着.js,没有期望
如果我正在测试自己,如上例所述:
if (res.statusCode !== 200) {
console.log('ERROR...:', res.statusCode);
}
然后我收到一条代码为 500 的消息,程序继续。为什么 Chai.Expect 不能这样工作?
我应该恢复到另一个测试框架吗?我错过了 Chai 的设置吗?(DoNotThrowAssertionErrors = true)
希望你们能帮助我。
谢谢,
伯特
解决方案
推荐阅读
- flutter - 是否可以在 Flutter 的函数中将类作为参数传递?
- laravel - 如何将多个关联数组条目发布到邮递员以及如何在 laravel 控制器中访问它
- java - Springboot JPA 将列连接为实体
- android - 异常的 WRAP_CONTENT 行为
- google-roads-api - Google Roads API“未找到请求的实体”
- regex - 使用额外参数和更改函数名称的批量重构函数调用
- c# - 如何使用 [HttpPut] 动词访问 WebApi 控制器中的 HttpParams
- php - 如何在 laravel Eloquent 中获取包含多个表的整个对象?(数据库结构已更新)
- python - Python-Pandas:如何通过一列中有多少相似值来创建排序数据框?
- python - Bot无法连接语音通道