【发布时间】:2017-11-18 23:34:36
【问题描述】:
// Balance.jsx
...
updateToken () {
const parseResponse = (response) => {
if (response.ok) {
return response.json()
} else {
throw new Error('Could not retrieve access token.')
}
}
const update = (data) => {
if (data.token) {
this.data.accessTokenData = data
} else {
throw new Error('Invalid response from token api')
}
}
if (this.props.balanceEndpoint !== null) {
return fetch(this.props.accessTokenEndpoint, {
method: 'get',
credentials: 'include'
})
.then(parseResponse)
.then(update)
.catch((err) => Promise.reject(err))
}
}
componentDidMount () {
this.updateToken()
.then(() => this.updateBalance())
}
}
// Test
it('updates the balance', () => {
subject = mount(<Balance {...props} />)
expect(fetchMock.called('balance.json')).to.be.true
})
我不知道如何使用 Mocha 测试上述内容。代码确实有效,方法 updateBalance 被调用并且 fetch api 调用确实发生了,但测试仍然失败。如果我同步调用 updateBalance() 它会通过......我如何告诉测试等待承诺解决?
【问题讨论】:
-
你能提供
updateToken代码吗? -
总是
return来自每个函数的承诺。这样你就可以轻松地等待它了。 -
我已经添加了 updateToken 代码。我确实相信我正在从 updateToken 方法返回一个承诺,因为 fetch api 返回一个承诺,我直接返回它。我想我已经设置好了一切正常工作,我只是不知道如何让摩卡咖啡等待它......
-
@Riina 我认为 Bergi 的意思是您需要将来自
updateToken的承诺返回给调用它的测试函数。看我下面的答案。
标签: node.js reactjs promise mocha.js sinon