我有一個Axios XHR庫的包裝,我試圖爲我的代碼編寫一些單元測試。但是,當我運行我的測試時,他們都沒有告訴我超時超時。我如何構建我的測試以運行我的斷言?單元測試嵌套承諾失敗,超時
這裏的包裝代碼:
export const clientRequest = (xhrClient, endpoint, params = {}) => {
const method = params.method || 'get'
const {config, data, noOrg, unrestricted} = params
let reqParams = data
if (!isNil(data) && method === 'get') {
reqParams = {params: data}
}
const authConfig = unrestricted ? {...config, withCredentials: false} :
{...config, withCredentials: true}
const concatEndpoint = noOrg ? endpoint :
`${Cookies.get('organization') || 'default' }${endpoint}`
return new Promise((resolve, reject) => {
xhrClient[method](concatEndpoint, reqParams, authConfig)
.then(response => resolve(response))
.catch(err => reject(err))
})
}
,問題中的測試:
describe('clientRequest()',() => {
const resolveSpy = sinon.spy()
const fakeClient = {
get:() => new Promise(resolveSpy),
}
it.only('should make a call to the supplied method', (done) => {
const result = xhr.clientRequest(fakeClient, '/foobar', {method: 'get'})
result.then(() => {
expect(resolveSpy).to.have.beenCalledWith('/foobar', undefined, {withCredentials: true})
done()
})
})
})
我不認爲我可以回答你的問題。然而,我對你使用承諾有一個評論......你的'clientRequest'函數以一個返回值結束,這個返回值是一個新的承諾,它包含一個'then'的反應。這似乎違背了我對承諾的瞭解,因爲嵌套承諾通常(總是?)是一種反模式,應該進行扁平化。這可能與您的直接問題相關,也可能不相關,我可能會錯過代碼的重點,但您可能需要進一步研究。 –
有幾個問題和一個註釋:1.是調用'then'內容的結果保證嗎? 2.你確定你不需要在'before'塊中設置'spy'和'fakeClient'嗎?注意:您可以在不使用'done'回調的情況下返回測試中的承諾(摩卡理解'Promises'並等待返回的完成) – MarcoL
@MarcoL刪除'done'回調似乎已經奏效。我想知道爲什麼會導致它失敗? –