Как выполнять последующие вызовы по тому же URL-адресу через Nock с другим кодом состояния

#node.js #sinon #nock

#node.js #sinon #nock

Вопрос:

Проблема: я хочу смоделировать ситуацию, в которой при одном и том же http-вызове я получаю разные результаты. В частности, при первом сбое. В какой-то степени это похоже на Sinon возможность stub.onFirstCall() , stub.onSecondCall() Ожидание: я ожидал, что если я использую once при первом вызове и twice при втором вызове, я смогу выполнить вышеуказанное.

 nock( some_url )
    .post( '/aaaa', bodyFn )
    .once()
    .reply( 500, resp );
nock( some_url )
    .post( '/aaaa', bodyFn )
    .twice()
    .reply( 200, resp );
  

Ответ №1:

Правильный способ — просто вызвать Nock дважды.

 nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 500, resp );
nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 200, resp );
  

Способ работы Nock заключается в том, что каждый вызов регистрирует перехватчик для some_url .
Фактически при первом вызове some_url будет удален первый перехватчик и так далее.

как указано в документах:

Когда вы настраиваете перехватчик для URL-адреса и этот перехватчик используется, он удаляется из списка перехватчиков. Это означает, что вы можете перехватывать 2 или более вызовов по одному и тому же URL и возвращать разные данные по каждому из них. Это также означает, что вы должны настроить один перехватчик для каждого запроса, который у вас будет, в противном случае nock выдаст ошибку, потому что этот URL не присутствовал в списке перехватчиков. Если вы не хотите, чтобы перехватчики удалялись по мере их использования, вы можете использовать метод .persist() .