@roderickhsiao/react-i13n
Version:
[Experiment] React I13n provides a performant and scalable solution to application instrumentation.
110 lines (101 loc) • 3.52 kB
JavaScript
/**
* Copyright 2020, Yahoo! Inc.
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/
/* globals describe, it */
import EventsQueue from '../EventsQueue';
describe('EventsQueue', () => {
it('should be created correctly', () => {
var testPlugin = {
name: 'test',
eventHandlers: {}
};
var eventsQueue = new EventsQueue(testPlugin);
expect(eventsQueue._plugin).toEqual(testPlugin);
expect(eventsQueue._pendingCallbacks).toEqual([]);
expect(eventsQueue._pendingEventsCount).toEqual(0);
});
it('should execute event correctly', done => {
var testPlugin = {
name: 'test',
eventHandlers: {
click(payload, callback) {
expect(typeof payload).toEqual('object');
callback();
}
}
};
var eventsQueue = new EventsQueue(testPlugin);
eventsQueue.executeEvent('click', {}, () => {
// after events are executed, the pending evnets should be empty
expect(eventsQueue._pendingCallbacks.length).toEqual(0);
expect(eventsQueue._pendingEventsCount).toEqual(0);
done();
});
});
it('should execute event correctly event if there is fatal error in the handler', done => {
var testPlugin = {
name: 'test',
eventHandlers: {
click(payload, callback) {
payload.a.b.c = null; // should be fatal error
callback();
}
}
};
var eventsQueue = new EventsQueue(testPlugin); // the reject function will be executed
eventsQueue.executeEvent('click', {}, null, () => {
// after events are executed, the pending evnets should be empty
expect(eventsQueue._pendingCallbacks.length).toEqual(0);
expect(eventsQueue._pendingEventsCount).toEqual(0);
done();
});
});
it('should execute event correctly event if no handler defined', done => {
var testPlugin = {
name: 'test',
eventHandlers: {
click(payload, callback) {
callback();
}
}
};
var eventsQueue = new EventsQueue(testPlugin);
eventsQueue.executeEvent('pageview', {}, () => {
// after events are executed, the pending evnets should be empty
expect(eventsQueue._pendingCallbacks.length).toEqual(0);
expect(eventsQueue._pendingEventsCount).toEqual(0);
done();
});
});
it('should execute event correctly and all events can be executed completely', done => {
var testPlugin = {
name: 'test',
eventHandlers: {
click(payload, callback) {
expect(typeof payload).toEqual('object');
callback();
},
updated(payload, callback) {
setTimeout(() => {
// the pending events should be executed either
expect(typeof payload).toEqual('object');
callback();
}, 200);
}
}
};
var eventsQueue = new EventsQueue(testPlugin);
eventsQueue.executeEvent('updated', {}, () => {
// after events are executed, the pending evnets should be empty
expect(eventsQueue._pendingCallbacks.length).toEqual(1); // should have callback for click not executed yet
expect(eventsQueue._pendingEventsCount).toEqual(0);
done();
});
eventsQueue.executeEvent('click', {}, () => {
// after events are executed, the pending evnets should be empty
expect(eventsQueue._pendingCallbacks.length).toEqual(0);
expect(eventsQueue._pendingEventsCount).toEqual(0);
});
});
});