заглушка sinon первый вызов API и шпион второй вызов API - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть такой метод

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));

Есть два вопроса:

  1. Как я могу spy, чтобы в случае сценария с первой ошибкой API не вызывался API второй выборки?
  2. Как я могу заблокировать оба вызова выборки и проверить, что последний then вызывается, когда оба вызова выборки разрешены?

Спасибо.

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете использовать шпионский 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')

...