Я использую повестку дня для фоновых заданий и пытаюсь проверить метод определения, чтобы убедиться, что: 1) повестки дня. Вызван метод 2. и 2.) вызван метод внутри повестки дня. Определение (triggerSend).
Я включил четыре файла, которые я использую для этого теста: 1.) определение задания повестки дня 2.) служебная функция triggerSend 3.) заглушки sinon 4.) реальный тест. Я буду очень признателен за любую помощь, которую вы можете предложить!
Как и так, повестки дня. Вызывается дважды, и я вижу журналы для триггера, вызываемого дважды. Первый triggerSend показывает объект задания, второй журнал triggerSend показывает undefined
.
Я хотел бы выяснить, как я могу точно захватить повестки дня. Определения и triggerSend, используя sinon .
повестка дня / кампании / задания / тест. js (работа с повесткой дня.define):
const triggerSend = require('../../../campaign/trigger.js');
module.exports = function(agenda) {
agenda.define('test', function(job,done){
console.log("agenda.define called!");
triggerSend(job)
.then(done).catch(done);
});
}
кампания / триггер. js Функция запуска triggerSend, вызываемая в context.define:
module.exports = async function(job) {
console.log("triggerSend for job: ", job);
// Legacy procedural code
}
fixtures / stubs / index. js
const sinon = require('sinon');
module.exports = {
DefineAgenda: function(agenda, jobMock) {
return sinon.stub(agenda, 'define').callsFake(function(job, done) {
/*
*This is to call the function (job, done) callback from agenda.define,
*it results in triggerSend being actually called (not the stub) but it
*also results in agenda.define being called twice.
*/
return arguments[1](jobMock, done);
});
},
TriggerSend: function(triggerSend, jobMock) {
return sinon.stub(triggerSend, 'default').callsFake(function(job) {
console.log("triggerSend arguments: ", arguments)
return arguments[1](jobMock);
});
}
}
test.test. js:
const chai = require("chai");
const expect = chai.expect;
const agenda = require('../../../modules/agenda').campaignInstance();
const triggerSend = require('../../../campaign/trigger.js');
const triggerSendObj = { default: triggerSend };
const DefineAgenda = require('../../../fixtures/stubs').DefineAgenda;
const TriggerSend = require('../../../fixtures/stubs').TriggerSend;
const jobMock = require('../../../fixtures/mocks/jobs').campaign;
const testJob = require('../../../agenda/campaigns/jobs/test.js');
describe('Campaign agenda.define', function() {
before(function() {
this.DefineAgendaStub = DefineAgenda(agenda, jobMock);
this.TriggerSendStub = TriggerSend(triggerSendObj, jobMock);
});
it('is called', async function() {
//call agenda job for test
testJob(agenda);
//assertions
expect(agenda.define.called).to.be.true;
expect(triggerSendObj.default.called).to.be.true;
})
});