事件发射器Javascript

时间:2017-10-23 09:46:47

标签: javascript jasmine

嗨,我是javascript的新手。我在javascript中实现函数发射器,我在使用jasmine框架测试它时遇到了麻烦。下面是函数发射器和测试函数的代码。

// 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);
 });

上述测试失败。我不知道为什么。有人可以帮我这个。感谢。

2 个答案:

答案 0 :(得分:0)

错误说Emitter.on未定义。请参阅this thread

on在Emitter实例上定义。

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

a = new Emitter()
=> created Emitter!
a.on()
=> on

答案 1 :(得分:0)

我可以解决这个错误。我必须将函数导出到测试并将浏览器更改为karma.conf.js文件中的chrome。现在我得到了这个TypeError:无法读取属性' event_name_one'未定义的。我已定义

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);
        });

我不明白为什么会收到此错误。任何人都可以提供有关this.thanks的帮助。