嗨,我是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);
});
上述测试失败。我不知道为什么。有人可以帮我这个。感谢。
答案 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的帮助。