gpt4 book ai didi

node.js - 单元测试 Express 中间件的正确方法

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:35 25 4
gpt4 key购买 nike

<分区>

我有一个 Express 中间件,它被设置为在我的服务器上的所有 POST 请求中检查有效的 Content-Type header ,这个中间件的代码如下:

import * as STRINGS from "../Common/strings";

function ContentTypeValidator(req, res, next) {
let contentHeader = req.get("content-type");
if(!contentHeader) {
res.status(400).send(STRINGS.ERROR_CONTENT_TYPE_MISSING);
} else {
if(contentHeader.toLowerCase() !== "application/json") {
res.status(415).send(STRINGS.ERROR_CONTENT_TYPE_UNSUPPORTED);
} else {
next();
}
}
}

export default ContentTypeValidator;

我正在为我的 TDD 使用 mochachainode-mocks-http,我的问题围绕着 next 时的测试() 不会被调用,因为 res.send() 会为我处理这个请求的结束。

it("Should return 200 for valid Content-Type header", (done) => {
req = nodeMocks.createRequest({
headers: {
"Content-Type": "application/json"
}
});
ContentTypeValidator(req, res, (err) => {
res.statusCode.should.equal(200);
expect(err).to.be.undefined;
done();
});
});

it("Should return 400 if Content-Type header is missing", (done) => {
ContentTypeValidator(req, res, () => {});
res.statusCode.should.equal(400);
res._getData().should.equal("Content-Type header missing");
done();
});

在上面的第一个测试中,我希望它通过,所以我传入一个函数作为 next() 函数,这个测试通过了。在第二个测试中,我预计这会失败,所以如果我传入一个函数,那么 mocah 会提示测试已超过 2000 毫秒,因为从未调用回调函数,这是预期的,因为 res.send() 在这种情况下正在处理它。

当像这样对 Express 中间件进行单元测试时,我编写第二个测试的方式是否正确,或者是否有更好/更可取的方法来执行此操作?

编辑:所以只是为了澄清,我专注于在下一个回调不会被调用时测试中间件,我显然重复的问题是使用 sinon 来检查是否下一个被称为。我正在寻找如何在不调用回调函数时进行单元测试。

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