我正在测试pub子类的发布方法。我在beforeEach函数内创建一个回调函数并订阅这个类。在它的方法中,我发布了事件并试图测试回调被调用,这基本上是该类的工作原理。我有测试工作,它通过,但问题是我不得不使用setTimeout得到这个工作。我相信这可能不是正确的做法。无功能间谍功能
describe('publish',() => {
let testpublish;
let callback;
beforeEach(() => {
callback = function(data) { return data + 10; }
testpublish = {
'id': 'testpublish1',
'event': 'testpublish',
'callback': callback
};
subject.subscribe(testpublish);
});
it('should call the subscription function',() => {
subject.publish('testpublish', 9);
setTimeout(() => {
expect(callback).toEqual(19);
});
});
});
我最初想窥探回调只是为了看它是否被调用,但茉莉的文件说,我必须把我的方法在一个对象:
spyOn(OBJ,方法名)→ {间谍}
任何意见,以更好的方式来做到这一点,将不胜感激。谢谢。
PubSub类如果有用?
@Injectable()
export class Pubsub {
private events: any = {};
public subscribe(config: any) {
let event = config['event'];
this.events[event] = this.events[event] || [];
if (this.events[event].length < 1) {
this.events[event].push(config);
} else {
for (let i = 0; i < this.events[event].length; i++) {
if (this.events[event][i].id !== config.id) {
this.events[event].push(config);
}
}
}
}
public unsubscribe(obj: Object) {
let event = obj['event'];
let id = obj['id'];
if (this.events[event]) {
this.events[event] = this.events[event].filter((eventObj) => {
return eventObj.id !== id;
});
}
if (this.events[event].length === 0) {
delete this.events[event];
}
}
public publish(event: string, data: any) {
if (this.events[event]) {
this.events[event].forEach(function(obj) {
obj.callback(data);
});
}
}
public getEvents() {
return this.events;
}
}
谢谢。我赞赏详细的解释,并指出我在代码中犯的其他错误。 – Aaron
不客气。 – estus