Я боролся за то, как я могу смоделировать функцию, чтобы я мог вернуть поддельное значение из этой функции.
У меня есть простой скрипт, который может сделать вызов API, однако этот вызов API имеет два параметра. Один параметр предоставляется через параметр родительской функции, другой - путем вызова другой функции. Возвращаемое значение из этой функции - это то, что мне нужно для насмешки.
Полный код довольно сложный, поэтому я сделал небольшой пример того, что я имею в виду. У меня есть функция makeTheCall
. В этой функции я вызываю функцию с именем setParameters
.
const setParams = require('setParams.js');
module.exports.makeTheCall = (event) => {
const params = setParams('GET', '/todos/1');
const postData = {
name: event.name,
location: event.location
}
console.log(params); //dynamic params 'method' and 'callpath' are both undefined here (should be 'GET' and '/todos/1')
return doARequest(params, postData).then((result) => {
return result;
}).catch((error) => {
return error;
})
}
Функция setParams
не так сложна. Он просто возвращает объект, который содержит некоторые статические и некоторые динамические значения.
module.exports.setParams = (method, callPath) => {
return {
host: 'jsonplaceholder.typicode.com',
port: 433,
method: method,
path: callPath
}
}
Теперь вот, где интересная роль вступает в игру. При написании простого теста вызов не может пройти. Это, конечно, потому что он не может разрешить динамические значения method
и callPath
.
const makeTheCall = require('makeTheCall.js');
it('runs a happy flow scenario', () => {
const event = {
name: 'John Doe',
location: 'Somewhere'
}
return makeTheCall(event)
.then(response => {
//Do some usefull testing here
});
});
У меня вопрос, как я могу смоделировать возвращаемое значение метода setParams, чтобы он возвращал что-то вроде:
{
host: 'jsonplaceholder.typicode.com',
port: 433,
method: 'GET',
path: '/todos/1'
}
Таким образом, я могу вызвать мой вызов API в моем тесте, не вызывая ошибки. Я искал насмешки, используя sinon, особенно в заглушках, например:
const params = setParams('GET', '/todos/1');
sinon.stub(params).returns({
host: 'jsonplaceholder.typicode.com',
port: 433,
method: 'GET',
path: '/todos/1'
});
Однако я думаю, что что-то упустил, потому что это не работает. Документация хороша, но после нескольких часов борьбы и попыток я начинаю чувствовать себя немного потерянным.
Кто знает / может указать мне правильное направление о том, как смоделировать возвращаемое значение функции setParams? Пример будет высоко оценен.