摩卡测试,为什么我必须使用“ this”来引用同一页面上的功能,而不是TS中的功能?

时间:2019-04-10 09:52:50

标签: unit-testing testing mocha

在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()
}

有没有我不需要更改代码而只是进行测试的解决方法?

0 个答案:

没有答案