feat(test-environment): add diagram-js like test env
This commit is contained in:
parent
4e7e574438
commit
3b9662527e
|
@ -0,0 +1,112 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash');
|
||||||
|
var BpmnJS = require('../../');
|
||||||
|
|
||||||
|
var OPTIONS, BPMN_JS;
|
||||||
|
|
||||||
|
function options(opts) {
|
||||||
|
if (_.isFunction(opts)) {
|
||||||
|
opts = opts();
|
||||||
|
}
|
||||||
|
|
||||||
|
OPTIONS = opts;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bootstrap BpmnJS given the specified options and a number of locals (i.e. services)
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* describe(function() {
|
||||||
|
*
|
||||||
|
* var mockEvents;
|
||||||
|
*
|
||||||
|
* beforeEach(bootstrapBpmnJS(function() {
|
||||||
|
* mockEvents = new Events();
|
||||||
|
*
|
||||||
|
* return {
|
||||||
|
* events: mockEvents
|
||||||
|
* };
|
||||||
|
* }));
|
||||||
|
*
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* @param {Object} (options) optional options to be passed to the diagram upon instantiation
|
||||||
|
* @param {Object|Function} locals the local overrides to be used by the diagram or a function that produces them
|
||||||
|
* @return {Function} a function to be passed to beforeEach
|
||||||
|
*/
|
||||||
|
function bootstrapBpmnJS(diagram, options, locals) {
|
||||||
|
|
||||||
|
return function(done) {
|
||||||
|
|
||||||
|
var _diagram = diagram,
|
||||||
|
_options = options,
|
||||||
|
_locals = locals;
|
||||||
|
|
||||||
|
if (!_locals && _.isFunction(_options)) {
|
||||||
|
_locals = _options;
|
||||||
|
_options = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_.isFunction(_options)) {
|
||||||
|
_options = _options();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_.isFunction(_locals)) {
|
||||||
|
_locals = _locals();
|
||||||
|
}
|
||||||
|
|
||||||
|
_options = _.extend({}, OPTIONS || {}, _options || {});
|
||||||
|
|
||||||
|
var mockModule = {};
|
||||||
|
|
||||||
|
_.forEach(_locals, function(v, k) {
|
||||||
|
mockModule[k] = ['value', v];
|
||||||
|
});
|
||||||
|
|
||||||
|
_options.modules = _.unique([].concat(_options.modules || [], [ mockModule ]));
|
||||||
|
|
||||||
|
BPMN_JS = new BpmnJS(_options);
|
||||||
|
|
||||||
|
// import diagram
|
||||||
|
BPMN_JS.importXML(_diagram, done);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injects services of an instantiated diagram into the argument.
|
||||||
|
*
|
||||||
|
* Use it in conjunction with {@link #bootstrapBpmnJS}.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* describe(function() {
|
||||||
|
*
|
||||||
|
* var mockEvents;
|
||||||
|
*
|
||||||
|
* beforeEach(bootstrapBpmnJS(...));
|
||||||
|
*
|
||||||
|
* it('should provide mocked events', inject(function(events) {
|
||||||
|
* expect(events).toBe(mockEvents);
|
||||||
|
* }));
|
||||||
|
*
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* @param {Function} fn the function to inject to
|
||||||
|
* @return {Function} a function that can be passed to it to carry out the injection
|
||||||
|
*/
|
||||||
|
function inject(fn) {
|
||||||
|
return function() {
|
||||||
|
|
||||||
|
if (!BPMN_JS) {
|
||||||
|
throw new Error('no bootstraped bpmn-js instance, ensure you created it via #bootstrapBpmnJS');
|
||||||
|
}
|
||||||
|
|
||||||
|
BPMN_JS.invoke(fn);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.bootstrapBpmnJS = (window || global).bootstrapBpmnJS = bootstrapBpmnJS;
|
||||||
|
module.exports.inject = (window || global).inject = inject;
|
|
@ -0,0 +1,51 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var TestHelper = require('../../TestHelper');
|
||||||
|
|
||||||
|
/* global bootstrapBpmnJS, inject */
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var Events = require('diagram-js/lib/core/EventBus');
|
||||||
|
|
||||||
|
|
||||||
|
describe('environment/Mocking', function() {
|
||||||
|
|
||||||
|
var diagramXML = fs.readFileSync('test/fixtures/bpmn/simple.bpmn', 'utf8');
|
||||||
|
|
||||||
|
var mockEvents, bootstrapCalled;
|
||||||
|
|
||||||
|
beforeEach(bootstrapBpmnJS(diagramXML, function() {
|
||||||
|
mockEvents = new Events();
|
||||||
|
|
||||||
|
bootstrapCalled = true;
|
||||||
|
|
||||||
|
return {
|
||||||
|
eventBus: mockEvents
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
afterEach(function() {
|
||||||
|
bootstrapCalled = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should use spy', inject(function(eventBus) {
|
||||||
|
|
||||||
|
expect(eventBus).toEqual(mockEvents);
|
||||||
|
expect(bootstrapCalled).toBe(true);
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should reparse bootstrap code', inject(function(eventBus) {
|
||||||
|
|
||||||
|
expect(bootstrapCalled).toBe(true);
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should inject bpmnjs', inject(function(bpmnjs) {
|
||||||
|
|
||||||
|
expect(bpmnjs).toBeDefined();
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in New Issue