sinon 存根第一个 api 调用和间谍第二个 api 调用
sinon stub first api call and spy second api call
我有这样的方法
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;
});
我正在存根第一个 fetch 调用,例如
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 错误情况下,不调用第二个提取 api?
- 我如何存根两个提取调用并测试最后一个
then
在两个提取调用都已解析时被调用?
谢谢。
您可以在存根上使用间谍 api。因此,如果您制作 fetch
的存根,您可以使用所有工具,例如 onFirstCall().resolves('some value')
到 return 承诺以及间谍属性,例如 calledTwice
.
例如 return 两个不同的承诺并测试 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')
我有这样的方法
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;
});
我正在存根第一个 fetch 调用,例如
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 错误情况下,不调用第二个提取 api? - 我如何存根两个提取调用并测试最后一个
then
在两个提取调用都已解析时被调用?
谢谢。
您可以在存根上使用间谍 api。因此,如果您制作 fetch
的存根,您可以使用所有工具,例如 onFirstCall().resolves('some value')
到 return 承诺以及间谍属性,例如 calledTwice
.
例如 return 两个不同的承诺并测试 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')