我真的不知道该如何表达我的问题。但我可以解释发生了什么。
server.js(受影响的路由定义)
app.get("/api/users/:id", users.getUser);
users.js(用户路由文件)
getUser: asyncMiddleware(async (req, res, next) => {
const { data } = await axios.get(
`https://jsonplaceholder.typicode.com/users/${req.params.id}`
);
const userData = pruneData([data]);
res.status(200).json(userData);
})
asyncMiddleware.js(捕获异步错误)
const asyncMiddleware = fn => (req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next);
};
export default asyncMiddleware;
users.test.js
import chai from "chai";
import chaiHttp from "chai-http";
import app from "../../src/server/server";
const expect = chai.expect;
chai.use(chaiHttp);
describe("Users API tests", () => {
it("should return a 500 server error", done => {
chai
.request(app)
.get("/api/users/11") // outside the range or contacts
.end((err, res) => {
expect(res).to.have.status(404);
done();
});
});
});
测试输出
Error: Request failed with status code 404
at createError (/Users/XXXX/node_modules/axios/lib/core/createError.js:16:15)
at settle (/Users/XXXX/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/Users/XXXX/node_modules/axios/lib/adapters/http.js:237:11)
at IncomingMessage.emit (events.js:205:15)
at endReadableNT (_stream_readable.js:1154:12)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
1) should return a 500 server error
1 failing
1) Users API tests
should return a 500 server error:
Uncaught AssertionError: expected { Object (_events, _eventsCount, ...) } to have status code 404 but got 500
+ expected - actual
-500
+404
at status (tests/routes/users.test.js:43:29)
at Test.Request.callback (node_modules/superagent/lib/node/index.js:716:12)
at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/index.js:916:18)
at endReadableNT (_stream_readable.js:1154:12)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
jsonplaceholder.typicode.com
当您提供超出范围的 id 时,网站实际返回的响应状态为 404。这就是 404 的来源,但为什么测试没有捕捉到它,而是从我自己的服务器发送 500?
如果我更改测试以检查状态 500,所有测试都通过,但我仍然Error: Request failed with status code 404
在测试输出中。
顺便说一句 - 我还有 10 个其他测试通过,没有任何问题,这是迄今为止我的套件中唯一的一个。