我有一個jquery Ajax調用看起來是這樣的:摩卡測試存根Ajax調用了。然後
$.ajax({
type: "GET",
dataType: 'json',
data: data,
url: url
}).then((data, successFlag, xhr) => {
this.props.someFunc(data)
})
在我的測試文件,我有jQuery的AJAX調用存根與興農和它用數據返回已解決的承諾:
sinon.stub($, 'ajax')
.returns(Promise.resolve({ data: 'test data' }))
而且我也在監視我的someFunc(數據)函數。在我的測試中,我調用了一個使ajax調用的函數,然後期待我的someFunc(數據)被調用。然而,期望失敗了,但是當我把控制檯登錄我someFunc(數據)的功能,我可以看到,它顯然是被稱爲:
component.instance().makeAjaxCall()
expect($.ajax.calledOnce).to.be.true // passes
expect(someFuncSpy.calledOnce).to.be.true // fails
現在,我認爲它的失敗,因爲它之前檢查預期然後。然後執行,我嘗試查找一些解決方案來處理與承諾測試,但沒有任何我嘗試過迄今爲止(或我執行它錯誤)。在檢查期望之前,如何確保.then完成執行?
對不起,我不明確,但問題是,我的makeAjaxCall()沒有返回一個承諾。製作ajax調用只是makeAjaxCall()函數的一部分,所以我不能鏈接到我的函數。 – Andrew
因此,除了通過setTimeout或類似的東西來預測下一個事件外,沒有一個乾淨的方法來「等待」解決的承諾。 – felixmosh