我可能会错过Sinon创建其存根的方式,但这里是我试图测试的一些代码(它是TypeScript,但是我'我相信它在ES6 JS中是一样的:)
public requestNewUserProfile(authenticationToken: string, callbackUrl?: string): Function {
return (dispatch) => {
dispatch(this.requestNewUserProfileInit(authenticationToken))
return fetch(this.buildUserProfileRequest(authenticationToken))
.then(response => {
// some error handling
return response.json()
})
.then(user => {
dispatch(this.requestNewUserProfileSuccess(user))
})
.catch(error => {
dispatch(this.requestNewUserProfileFailure(error.message))
})
}
}
由于我已经单独测试了这里调用的每个方法,所以我更愿意,如果我可以简单地将它们存根并断言它们已被调用。否则,我需要再次模拟数据,这反过来会导致比我更喜欢的更脆弱的测试。
我在测试中尝试了sandbox.stub(Class.prototype, 'requestNewUserProfileSuccess')
和sandbox.stub(classInstance, 'requestNewUserProfileSuccess')
。存根适用于具有dispatch
参数的匿名函数内部的方法,但只要在fetch()
调用中调用它,模拟就会被忽略,实际的类将被忽略。使用了方法,导致错误,因为fetch调用的结果缺少参数requestNewUserProfileSuccess()
所期望的。
我努力实现的目标是什么?如果是这样,我该如何设置呢?