我正在构建一个使用Firebase作为前端的角度应用。但我无法看到如何在我的应用中为Firebase代码实施单元测试。
总之,我的问题是:
作为一个例子,某人可以单独测试以下方法吗?
service.subscribeForEvent = function (eventKey) {
service.dbRef = firebase.database().ref(eventKey);
service.dbRef.on('value', function (result) {
onMessage(result.val());
});
};
I have created a fake of firebase:
firebase = {
__ref: {
events: {
'child_added': [],
'child_changed': []
},
push: function (data) {
angular.forEach(this.events["child_added"], function (each) {
each(data);
});
},
update: function (data) {
angular.forEach(this.events["child_changed"], function (each) {
each(data);
});
},
child: function () {
return {
on: function (eventType, callback) {
window.firebase.__ref.events[eventType].push(callback);
}
};
}
},
database: function () {
return {
ref: function () {
return window.firebase.__ref;
},
$clean: function () {
window.firebase.__ref.events['child_added'] = [];
window.firebase.__ref.events['child_changed'] = [];
}
};
};
并期望在firebase中添加新子项后,将调用回调函数:
it('subscribe for added event and receive message for it', function () {
var eventName = 'new event';
var callback = jasmine.createSpy('callback');
pushApi.bind(eventName, callback);
ref.push({
val: function () {
return {event: {key: eventName}};
}
});
expect(callback).toHaveBeenCalledWith({key: eventName});
};
但是当运行测试时,它会预期会创建默认的firebase。