Я пытаюсь издеваться над следующим классом:
import EventEmitter from 'eventemitter3';
export default class BaseComponent extends EventEmitter {
constructor () {
super();
// Turn off memory leak warning on EventEmitter.
/* eslint-disable no-magic-numbers */
this.setMaxListeners(0);
/* eslint-enable no-magic-numbers */
this.state = {};
this.defaultOptions = {};
}
init ($el, options) {
this.$el = $el;
this.options = Object.assign({}, this.defaultOptions, options);
this.$el.data('component', this);
this.initChildren();
this.addAriaAttributes();
this.addListeners();
}
initChildren () {
}
addAriaAttributes () {
}
addListeners () {
}
}
Я использую карму для тестового бегуна, который работает нормально.Я также использую жасмин для описания шагов.Я читал, что Sinon.js можно использовать для макетирования компонентов, но это выглядит совершенно иначе, чем то, как я обычно делаю это в C #.
Я думал, что мне нужно будет импортировать генератор событий и класс, который я хочумодульный тест выглядит так:
import EventEmitter from 'eventemitter3';
import BaseComponent from './base-component.js';
Затем создайте компонент и установите базовый класс следующим образом:
var baseComponent = new BaseComponent();
var emitter = new EventEmitter();
baseComponent.prototype = emitter.prototype;
Затем настройте нужные мне данные:
var data { baseComponent };
var $el { data };
var options = {};
var defaultOptions = {};
var baseComponentoptions = Object.assign({}, defaultOptions, options);
Затем создайте шпиона и вызовите init:
it('Should set component data', () => {
const spyFunc = sinon.spy(baseComponent, 'init');
spyFunc($el, baseComponentoptions);
expect(spyFunc.calledOnce).toEqual(true);
});
Но базовый класс не устанавливается для baseComponent, и когда вызывается шпион, он жалуется на неопределенность baseComponent.Я совершенно новичок в издевательствах в JS, поэтому будьте добры:).