Как заглушить запрос клиента 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
, Вы можете сделать это, используя методы, которые попадают в одну из двух категорий:
- Внедрение зависимостей - выставьте установщик, с помощью которого вы можете ввести поддельный модуль, которым вы управляете, для тестирования
- Использование швов ссылок - подключитесь к механизму импорта / запроса и переопределите то, что получает модуль.
У проекта 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);
}
});