茉莉花单元测试角度为1.4 app + Firebase

时间:2017-10-06 13:43:35

标签: angularjs firebase-realtime-database jasmine karma-runner

我正在构建一个使用Firebase作为前端的角度应用。但我无法看到如何在我的应用中为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。

0 个答案:

没有答案
相关问题