Вы можете использовать Sinon.js ' Stubs , чтобы заглушить функцию send () запрашивающей стороны.
Я продемонстрирую на простом примере. Этот файл содержит и запросчик и ответчик и просто возвращает "bar". Он также экспортирует запросчик, так как нам нужен доступ к нему, чтобы заглушить его.
const cote = require('cote');
// Responder
const timeService = new cote.Responder({ name: 'Time Service' });
timeService.on('test', async () => {
return 'bar'
});
// Requester
const requester = new cote.Requester({ name: 'Client' });
async function test() {
return requester.send({ type: 'test' })
}
module.exports = { test, requester } // Export the requester
Реальные тесты тогда имеют доступ к запрашивающей стороне и могут использовать функции sinons stub(obj, "method")
и stub.returns('whatever')
:
const test = require('ava')
const sinon = require('sinon')
const foo = require('../')
test('test function should return bar when unstubbed and foo when stubbed', async t => {
// Unstubbed call
const returnValue = await foo.test()
t.is(returnValue, 'bar')
// Stub requester objects send function
var stub = sinon.stub(foo.requester, "send");
// Make it return whatever you like
stub.returns('foo')
// Test it
const stubbedValue = await foo.test()
t.is(stubbedValue, 'foo')
// Remove the stub
stub.restore();
// Original unstubbed call
const returnValue = await foo.test()
t.is(returnValue, 'bar')
});
Ознакомьтесь с документами , поскольку вы также можете использовать stub.withArgs
или stub.callsFake(fakeFunction)
, чтобы сделать его более гибким.