gpt4 book ai didi

node.js - 使用 'supertest' 进行测试期间的 Express 中间件控制台输出

转载 作者:行者123 更新时间:2023-12-02 15:13:32 25 4
gpt4 key购买 nike

在 Supertest 中运行时,此中间件未显示:

app.use((err, req, res, next) => {
// WHY DOES Supertest NOT SHOW THIS ERROR??
console.log("error: ", err.message);
res.status(422).send({ error: err.message });
});

我只是花了很多愚蠢的时间试图找到这个错误:

Driver.findByIdAndDelete(driverId) // Remove NOT Delete
.then(driver => {
res.status(204).send(driver)
})
...

使用 Postman 时,中间件正确地将错误显示为对正文的响应,但在运行测试时则不然。

我打开了 2 个终端窗口,运行 npm run:teststart,在运行 Postman 之前,这里没有显示任何有用的内容。

即使在运行 Supertest 时也有办法访问此日志输出吗?

package.json:

"dependencies": {
"body-parser": "^1.17.1",
"express": "^4.15.2",
"mocha": "^3.2.0",
"mongoose": "^4.8.6"
},
"devDependencies": {
"nodemon": "^1.11.0",
"supertest": "^3.0.0"
}

最佳答案

这里是 supertest 与快速错误处理程序中间件配合使用的最小工作示例。

app.js:

const express = require("express");
const app = express();

app.get("/", (req, res, next) => {
const error = new Error("make an error");
next(error);
});

app.use((err, req, res, next) => {
console.log("error: ", err.message);
res.status(422).send({ error: err.message });
});

module.exports = app;

app.test.js:

const app = require("./app");
const request = require("supertest");
const { expect } = require("chai");

describe("42680896", () => {
it("should pass", (done) => {
request(app)
.get("/")
.expect(422)
.end((err, res) => {
if (err) return done(err);
expect(res.body).to.be.eql({ error: "make an error" });
done();
});
});
});

集成测试结果:

 42680896
error: make an error
✓ should pass


1 passing (31ms)

-------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-------------|----------|----------|----------|----------|-------------------|
All files | 94.74 | 50 | 100 | 100 | |
app.js | 100 | 100 | 100 | 100 | |
app.test.js | 90 | 50 | 100 | 100 | 11 |
-------------|----------|----------|----------|----------|-------------------|

源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/42680896

关于node.js - 使用 'supertest' 进行测试期间的 Express 中间件控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com