在Mocha / Sinn中是否存在一种不更改代码而不编写测试的解决方法?
我们在生产headers.ts
文件中有此代码,并且在同一文件中有引用其他方法的方法。该代码有效,但是如果不更新代码就无法编写测试。
export function hidePoweredBy(res: Response) {
res.app.disable('x-powered-by')
res.removeHeader('Server')
}
export function frameguard(res: Response) {
res.setHeader('X-Frame-Options', 'SAMEORIGIN')
}
export function securityHeaders(req: Request, res: Response, next: any) {
frameguard(res)
nocache(res)
hidePoweredBy(res)
next()
}
方法的规范文件
describe('securityHeaders', () => {
it('Should call all methods in securityHeaders', () => {
const sandbox = sinon.createSandbox()
sandbox.stub(securityHeaders, 'frameguard')
sandbox.stub(securityHeaders, 'nocache')
sandbox.stub(securityHeaders, 'hidePoweredBy')
const req = mockReq()
const res = mockRes()
const spy = sinon.spy()
securityHeaders.securityHeaders(req, res, spy )
expect(securityHeaders.frameguard).to.have.been.called
expect(securityHeaders.nocache).to.have.been.called
expect(securityHeaders.hidePoweredBy).to.have.been.called
sandbox.restore()
})
})
要让我编写一个有效的测试,我需要引用将“ this”作为范围的方法。
export function hidePoweredBy(res: Response) {
res.app.disable('x-powered-by')
res.removeHeader('Server')
}
export function frameguard(res: Response) {
res.setHeader('X-Frame-Options', 'SAMEORIGIN')
}
export function securityHeaders(req: Request, res: Response, next: any) {
this.frameguard(res)
this.nocache(res)
this.hidePoweredBy(res)
next()
}
有没有我不需要更改代码而只是进行测试的解决方法?