首页 > 解决方案 > 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)

希望你们能帮助我。

谢谢,

伯特

标签: javascriptnode.jschai

解决方案


推荐阅读