Skip to content

Instantly share code, notes, and snippets.

@sidwood
Created December 11, 2018 12:39
Show Gist options
  • Save sidwood/612a57bed8837356e9217ea2721f7d46 to your computer and use it in GitHub Desktop.
Save sidwood/612a57bed8837356e9217ea2721f7d46 to your computer and use it in GitHub Desktop.
Testing Moleculer services with event interfaces
{
"name": "moleculer-event-testing",
"version": "0.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "jest --watch some-process.service.spec.js"
},
"keywords": [],
"author": "Sid Wood",
"license": "UNLICENSED",
"dependencies": {
"moleculer": "^0.13.5"
},
"devDependencies": {
"jest": "^23.6.0"
}
}
'use strict'
module.exports = {
name: 'some-process',
events: {
'process.start'(graph) {
return this.doWork(graph)
}
},
methods: {
doWork(graph) {
return this.broker.Promise
.resolve({some: 'value'})
.then((entity) => {
graph.entities.push(entity)
this.broker.emit('process.complete', graph)
})
.catch((err) => {
this.logger.error(err)
})
}
}
}
'use strict'
// 3rd-party
const {ServiceBroker} = require('moleculer')
// sut
const serviceSchema = require('./index')
// init
const broker = new ServiceBroker({logLevel: 'error'})
const given = describe
const spy = jest.fn()
describe('some-process.service', () => {
beforeAll(() => {
serviceSchema.events['process.complete'] = spy
this.service = broker.createService(serviceSchema)
return broker.start()
})
afterAll(async () => {
await broker.destroyService(this.service)
await broker.stop()
})
given('"process.start" event', () => {
it('processes the event as expected', () => {
broker.emit('process.start', getInputGraph())
return broker.Promise.delay(100).then(() => {
expect(spy).toHaveBeenCalledWith(
getOutputGraph(),
broker.nodeID,
'process.complete'
)
})
})
})
})
function getInputGraph() {
return {
entities: []
}
}
function getOutputGraph() {
return {
entities: [{some: 'value'}]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment