sinon stub first api call and spy second api call
I have a method like this
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;
);
I am stubbing the first fetch call like
const stub = sinon.stub(window, 'fetch');
Now to test success call
stub.withArgs('first api').returns(Promise.resolve(//window.Response));
or failure
stub.withArgs('first api').returns(Promise.reject(//window.Response));
Have two questions:
- How can I
spy
that in case of first api error scenario, second fetch api is not called? - How can I stub both fetch calls and test that last
then
is called when both fetch calls is resolved?
Thanks.
javascript fetch sinon
add a comment |
I have a method like this
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;
);
I am stubbing the first fetch call like
const stub = sinon.stub(window, 'fetch');
Now to test success call
stub.withArgs('first api').returns(Promise.resolve(//window.Response));
or failure
stub.withArgs('first api').returns(Promise.reject(//window.Response));
Have two questions:
- How can I
spy
that in case of first api error scenario, second fetch api is not called? - How can I stub both fetch calls and test that last
then
is called when both fetch calls is resolved?
Thanks.
javascript fetch sinon
add a comment |
I have a method like this
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;
);
I am stubbing the first fetch call like
const stub = sinon.stub(window, 'fetch');
Now to test success call
stub.withArgs('first api').returns(Promise.resolve(//window.Response));
or failure
stub.withArgs('first api').returns(Promise.reject(//window.Response));
Have two questions:
- How can I
spy
that in case of first api error scenario, second fetch api is not called? - How can I stub both fetch calls and test that last
then
is called when both fetch calls is resolved?
Thanks.
javascript fetch sinon
I have a method like this
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;
);
I am stubbing the first fetch call like
const stub = sinon.stub(window, 'fetch');
Now to test success call
stub.withArgs('first api').returns(Promise.resolve(//window.Response));
or failure
stub.withArgs('first api').returns(Promise.reject(//window.Response));
Have two questions:
- How can I
spy
that in case of first api error scenario, second fetch api is not called? - How can I stub both fetch calls and test that last
then
is called when both fetch calls is resolved?
Thanks.
javascript fetch sinon
javascript fetch sinon
asked Nov 10 at 2:12
parsh
406820
406820
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You can use the spy api on stubs. So if you make a stub of fetch
you can use all the tools such as onFirstCall().resolves('some value')
to return a promise as well as the spy properties like calledTwice
.
For example to return two different promises and test that fetch
was called twice you can:
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>
To test for rejected promises use stub.rejects('some values')
Thanks. It worked.
– parsh
Nov 10 at 18:41
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53235449%2fsinon-stub-first-api-call-and-spy-second-api-call%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use the spy api on stubs. So if you make a stub of fetch
you can use all the tools such as onFirstCall().resolves('some value')
to return a promise as well as the spy properties like calledTwice
.
For example to return two different promises and test that fetch
was called twice you can:
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>
To test for rejected promises use stub.rejects('some values')
Thanks. It worked.
– parsh
Nov 10 at 18:41
add a comment |
You can use the spy api on stubs. So if you make a stub of fetch
you can use all the tools such as onFirstCall().resolves('some value')
to return a promise as well as the spy properties like calledTwice
.
For example to return two different promises and test that fetch
was called twice you can:
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>
To test for rejected promises use stub.rejects('some values')
Thanks. It worked.
– parsh
Nov 10 at 18:41
add a comment |
You can use the spy api on stubs. So if you make a stub of fetch
you can use all the tools such as onFirstCall().resolves('some value')
to return a promise as well as the spy properties like calledTwice
.
For example to return two different promises and test that fetch
was called twice you can:
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>
To test for rejected promises use stub.rejects('some values')
You can use the spy api on stubs. So if you make a stub of fetch
you can use all the tools such as onFirstCall().resolves('some value')
to return a promise as well as the spy properties like calledTwice
.
For example to return two different promises and test that fetch
was called twice you can:
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>
To test for rejected promises use stub.rejects('some values')
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>
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>
answered Nov 10 at 2:46
Mark Meyer
35.1k32855
35.1k32855
Thanks. It worked.
– parsh
Nov 10 at 18:41
add a comment |
Thanks. It worked.
– parsh
Nov 10 at 18:41
Thanks. It worked.
– parsh
Nov 10 at 18:41
Thanks. It worked.
– parsh
Nov 10 at 18:41
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53235449%2fsinon-stub-first-api-call-and-spy-second-api-call%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown