gpt4 book ai didi

javascript - 如何测试返回匿名函数的node.js模块?

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

我正在为 express.js 路由编写小型中间件,但是当我对这段代码进行单元测试时,我卡住了,我不知道如何使用 mocha、sinon 和 chai 正确地测试它。

我的中间件代码有这样的入口点:

 const searchByQuerystring = require('./search-by-querystring');
const searchByMarker = require('./search-by-marker');

module.exports = (req, res, next) => {

if (req.marker) {
searchByMarker(req, res, next);
} else if (req.query) {
searchByQuerystring(req, res, next);
} else {
next();
}
};

,在单元测试期间,我想测试是否调用了方法 searchByMarkersearchByQuerystring

所以我开始编写这个测试,

it('Should call search by querystring if querystring is present', () => {
const req = httpMocks.createRequest({
query: {
value: 1000
}
}),
res = httpMocks.createResponse(),
next = sandbox.spy();
searchIndex(req, res, next);

sinon.assert.calledOnce(next);
});

我的中间件应该在哪里使用 searchByQuerystring 处理请求,我想测试它是否调用了 searchByQuerystring 方法,但我真的不知道该怎么做,也许我应该以其他方式编写这段代码,我真的不想使用像 proxyquire 这样的库.

也许我的模块做了太多工作(根据单一职责原则)——但整个中间件是用于构建搜索对象的,在开始时我只需要找出参数从哪里来,所以我认为这是一个把这个逻辑放在中间件的开始是个好主意——我只应该有两个中间件?

请提供任何帮助和建议。

最佳答案

好的,

所以发表这篇文章可以帮助我找到解决方案。我重写了我的中间件入口点,看起来像这样

const searchRequestParser = require('./search-request-parser');
const search = require('../../../lib/search');

module.exports = (req, res, next) => {

const searchRequest = searchRequestParser(req);
if (searchRequest) {
const searchCriteria = search(searchRequest.resourceToSearch);
req.searchQuery =
searchCriteria.buildQuery(searchRequest.queryParameters);
}
next();
};

并测试

    it('Should call search by querystring if querystring is present', () => {
const req = httpMocks.createRequest({
method: 'GET',
params: {
resourceToSearch: 'debts'
},
query: {
value: 1000
}
}),
res = httpMocks.createResponse(),
next = sandbox.spy();
searchIndex(req, res, next);

expect(req).to.have.a.property('searchQuery');
});

所以方法 searchByMarkersearchByQuerystring 都消失了,取而代之的是方法 searchRequestParser 和输出,然后我在代码中处理这个输出,因为它变成了out 以前在方法 searchByMarkersearchByQuerystring 中重复。

感谢我使用的函数的返回输出,我不必专注于模拟/ stub 这些函数。

关于javascript - 如何测试返回匿名函数的node.js模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422087/

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