#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() .