Есть ли в Mocha / Sinon обходной путь, чтобы не менять код для написания теста?
У нас есть этот код в рабочем файле 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()
}
Есть ли обходной путь без меня, меняющего код и только тест?