我有这样的方法
fetch('first api')
.then(resp => {
if (resp.status === '500') {
return Promise.reject('some error');
}
return fetch('second api');
})
.then(resp => {
// do something;
})
.catch(resp => {
// do something;
});
我像第一个那样调用第一个提取调用
const stub = sinon.stub(window, 'fetch');
现在可以测试成功呼叫
stub.withArgs('first api').returns(Promise.resolve(//window.Response));
或失败
stub.withArgs('first api').returns(Promise.reject(//window.Response));
有两个问题:
spy
不调用第二个提取api?then
?谢谢。
答案 0 :(得分:1)
您可以在存根上使用间谍API。因此,如果您制作fetch
的存根,则可以使用onFirstCall().resolves('some value')
之类的所有工具来返回承诺以及calledTwice
之类的间谍属性。
例如,返回两个不同的承诺并测试两次fetch
被调用,您可以:
function run(){
return fetch('first api')
.then(resp => {
if (resp.status === '500') {
return Promise.reject('some error');
}
return fetch('second api');
})
.then(resp => {
// do something;
})
.catch(resp => {
// do something;
});
}
let stub = sinon.stub(window, 'fetch')
stub.onFirstCall().resolves("testing first")
stub.onSecondCall().resolves("testing second")
run().then(()=> console.log("called twice: ", stub.calledTwice))
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/7.1.1/sinon.min.js"></script>
要测试已拒绝的承诺,请使用stub.rejects('some values')