gpt4 book ai didi

node.js - 如何对 express-http-proxy 进行单元测试

转载 作者:行者123 更新时间:2023-12-05 07:17:00 25 4
gpt4 key购买 nike

我正在运行一个代理服务,该服务向请求添加 header 并使用 express-http-proxy 将其转发到另一个 API :

app.use(
proxy(proxyUrl, {
proxyReqOptDecorator(proxyReqOpts, srcReq) {
proxyReqOpts.headers.customHeader = 'custom header'
return proxyReqOpts
},
})
)

问题:

如何对这样的服务进行单元测试?

这是我测试普通 express 服务器的方式:

describe('proxy service', function() {
let server
beforeAll(() => {
server = app
})
afterAll(() => {
server.close()
})

describe('successful execution', () => {
test('responds to /', done => {
request(server)
.get('/')
.expect(200, done)
})
})
})

我想在不发出实际请求的情况下验证将向外部 API 发送的内容。

最佳答案

我有同样的问题,我现在的解决方案(直到我找到更好的)是这样的。(使用 Jest)

首先将代码拆分为单一职责功能。你应该得到这样的东西。

const injectHeaders = (req) => { // This is a pure function easy to UT
...
const headerA = ...
return (opts) => { // This is a pure function easy to UT

opts.headers[HEADERS.A] = headerA;

return opts;
};
};

那么你的代理代码应该差不多是这样的

app.use(
proxy(proxyUrl, {
proxyReqOptDecorator: injectHeaders,
})
)

最后你可以这样测试它:

const expressProxy = require('express-http-proxy');

jest.mock('express-http-proxy')

test('proxy called with correct params', () => {
...execute app.use code ...

expect(expressProxy).toHaveBeenCalledWith(proxyUrl, {
proxyReqOptDecorator: injectHeaders,
})
})

关于node.js - 如何对 express-http-proxy 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58952568/

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