测试包装外部函数的Angular工厂

时间:2015-07-19 02:05:54

标签: javascript angularjs unit-testing testing karma-jasmine

我的角度工厂包装了外部功能:

var External = function(){};

angular.module('app', [])
  .factory('ExternalWrap', function() {
    Object.defineProperty(External.prototype, '$id', {
      get: function() {
        return this.$$id === undefined || this.$$id === null ? this.id : this.$$id;
      },
      set: function(value) {
        this.$$id = value;
      },
      configurable: false,
      enumerable: false
    });

    return External;
  });

karma-jasmine测试:

describe('test', function () {
  beforeEach(module('app'));

  it('should work', function() {
    inject(function(ExternalWrap) {
      expect(ExternalWrap).toBeDefined();
    });
  });

  it('should work too', function() {
    inject(function(ExternalWrap) {
      expect(ExternalWrap).toBeDefined();
    });
  });
});

在第二次测试中,我收到错误TypeError: Cannot redefine property: $id。 是否可以在不更改ExternalWrap工厂的情况下进行测试?

1 个答案:

答案 0 :(得分:2)

你需要设置configurable: true,所以如果你想按原样离开工厂,我想答案是'不'。