使用 Sinon.JS 测试函数链
Testing function chains using Sinon.JS
如何使用 Sinon.JS 测试如下函数?
export function getToken(done) {
const kc = Keycloak(config)
kc.init({ onLoad: 'login-required' })
.success(authenticated => {
authenticated ? done(null, kc.token) : done(new Error('Some error!'), null)
})
.error(() => {
done(new Error('Some error'), null)
})
}
我试过如下操作,但没有成功:
it('should return access_token', () => {
const mockKeycloak = sinon.stub(Keycloak, 'init').returns({
success: () => (true)
})
getToken(function () {})
expect(mockKeycloak.callCount).to.equal(1)
})
基本上来自 keycloak-js 的 Keycloak 是一个 IIFE,但即使在尝试将 Keycloak
对象存根到 window 引用之后,我也可以'让它工作。
对于来到这里的任何人,这就是我所做的:
由于 Keycloak 是一个 IIFE,一旦我们这样做,它就会覆盖存根对象
const kc = Keycloak(config)
因此我刚刚从源中导出了这个对象 kc
并在其上添加了 init
方法并且它工作得很好!
如何使用 Sinon.JS 测试如下函数?
export function getToken(done) {
const kc = Keycloak(config)
kc.init({ onLoad: 'login-required' })
.success(authenticated => {
authenticated ? done(null, kc.token) : done(new Error('Some error!'), null)
})
.error(() => {
done(new Error('Some error'), null)
})
}
我试过如下操作,但没有成功:
it('should return access_token', () => {
const mockKeycloak = sinon.stub(Keycloak, 'init').returns({
success: () => (true)
})
getToken(function () {})
expect(mockKeycloak.callCount).to.equal(1)
})
基本上来自 keycloak-js 的 Keycloak 是一个 IIFE,但即使在尝试将 Keycloak
对象存根到 window 引用之后,我也可以'让它工作。
对于来到这里的任何人,这就是我所做的:
由于 Keycloak 是一个 IIFE,一旦我们这样做,它就会覆盖存根对象
const kc = Keycloak(config)
因此我刚刚从源中导出了这个对象 kc
并在其上添加了 init
方法并且它工作得很好!