Event Emitter Javascript

1

Привет, я новичок в javascript. Я использую emitter на функции в javascript, и у меня есть проблемы с его тестированием с использованием jasmine framework. Ниже приведена функция emitter on и код для проверки функции.

//main.js

Emitter.prototype.on = function (event, listener) 
{
    if (typeof this.events[event] !== 'object') 
    {
        this.events[event] = [];
     }

     this.events[event].push(listener);
 };

//test.js

describe('#on', () => 
{
    it('should subscribe to an event name and be called when 
    triggered', () => 
{

    Emitter.on(EVENT_NAME_ONE, spyFunction);
    //Emitter.trigger(EVENT_NAME_ONE);

    expect(spyFunction.calls.count()).toBe(1);
 });

Вышеупомянутый тест не выполняется. Я не знаю, почему. Может кто-то, пожалуйста, помогите мне с этим. Благодарю.

  • 0
    Пожалуйста, предоставьте больше деталей. что печатает провал теста? откуда появилась spyFunction?
  • 0
    beforeEach (() => {spyFunction = jasmine.createSpy ('EMPTY_FUNCTION_ONE');}); Шпионская функция создается, как показано в приведенном выше заявлении. Ниже приведена ошибка: FAILED TESTS: эмиттер #on должен подписаться на имя события и вызываться при запуске PhantomJS 2.1.1 (Mac OS X 0.0.0). TypeError: undefined не является конструктором (оценивает 'Emitter.on (EVENT_NAME_ONE, spyFunction) ') в test / emitterSpec.js (строка 161) test / emitterSpec.js: 166: 23 <- test / emitterSpec.js: 161: 27 загружен @ localhost: 9876 / context.js: 162: 17
Теги:
jasmine

2 ответа

0

Я мог бы решить эту ошибку. Мне пришлось экспортировать функцию в тесты и изменить браузер на хром в файле karma.conf.js. Теперь я получаю этот TypeError: Не могу прочитать свойство "event_name_one" undefined. Я определил

var Emitter = function () {
    this.events = {};
    var Event_Name_One;

} ;
export function on (event, listener) {
    if (typeof this.events[event] !== 'object') {
        this.events[event] = [];
    }

    this.events[event].push(listener);
};

и в test.js

// Testing event names
    const EVENT_NAME_ONE = 'event_name_one';

describe('#on', () => {
        it('should subscribe to an event name and be called when triggered', () => {
            Emitter.on(EVENT_NAME_ONE, spyFunction);
            Emitter.trigger(EVENT_NAME_ONE);

            expect(spyFunction.calls.count()).toBe(1);
        });

Я не понимаю, почему я получаю эту ошибку. Может ли кто-нибудь помочь в этом.

0

Ошибка говорит, что Emitter.on не определен. Смотрите эту тему.

on определяется на экземпляре эмиттера.

class Emitter {
    constructor() {
        console.log('created Emitter!')
    }
    on(event, callback) {
        console.log('on')
    }
}

a = new Emitter()
=> created Emitter!
a.on()
=> on
  • 0
    Спасибо, я пытался сделать это, но не работал. Я изменил браузер с PhantomJs на Chrome, и я получаю эту ошибку типа: Emitter.on не является функцией.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню