Как заглушить запрос клиента SOAP с помощью sinon в Node JS?

Я использую strong-soap модуль для получения данных из SOAP-запроса.

var soap = require('strong-soap').soap;

soap.createClient(url, options, function (err, client) {
     var method = client.GetInfoSOAP;
     method(requestQuery, function (err, info) {
      // bla bla
     }
}

Я получаю необходимые данные. Теперь я хочу написать тестовый блок для проверки SOAP-запроса с помощью sinon заглушка, но не получил никакого успеха. Любая помощь будет оценена.

2 ответа

То, что вы хотите, это контролировать soap объекты createClient, Вы можете сделать это, используя методы, которые попадают в одну из двух категорий:

  1. Внедрение зависимостей - выставьте установщик, с помощью которого вы можете ввести поддельный модуль, которым вы управляете, для тестирования
  2. Использование швов ссылок - подключитесь к механизму импорта / запроса и переопределите то, что получает модуль.

У проекта Sinon есть хорошая страница по использованию швов ссылок через proxyquire, и я также подробно рассказал, как сделать DI на трекере.

Для достижения первого, все, что вам нужно, это сделать что-то вроде этого в модуле:

module.exports._injectSoap = (fake) => soap = fake;

Тогда в вашем тестовом коде:

const fakeSoap = { createClient : sinon.stub().returns(/* ? */) }
myModule._injectSoap(fakeSoap);

...
assert(fakeSoap.createClient.calledOnce);
assert(...)

Привет, я решил мою проблему с помощью следующего кода:

sinon.stub(soap, 'createClient').yields(null, {
        GetInfoSOAP: function (request, cb) {
            return cb(null, myDesiredData);
        }
    });
Другие вопросы по тегам