Javascript 在es6中监视/模拟超类方法

Javascript 在es6中监视/模拟超类方法,javascript,angularjs,unit-testing,ecmascript-6,Javascript,Angularjs,Unit Testing,Ecmascript 6,下面是一些例子,但请了解我问题的要点 超级班: class Parent { constructor(a) { this._a = a; } doSomething() { ... implementation... } } 儿童班: class Child extends Parent { constructor() { super('a'); } doSomethingElse() { return super.doSomething(); }

下面是一些例子,但请了解我问题的要点

超级班:

class Parent {
  constructor(a) {
    this._a = a;
  }

  doSomething() { ... implementation... }
}
儿童班:

class Child extends Parent {
  constructor() {
    super('a');
  }

  doSomethingElse() { return super.doSomething(); }
}
我在Angular中使用这些类,因此父类被划分到提供子类的工厂中,如下所示:

 function ChildDeps(Parent) {
     return class Child extends Parent {
          ... Child class implementation here ...
     };
 }

 ChildDeps.$inject = ['Parent']
天真地,我首先在每个子句之前的一个提供中尝试了类似的内容:

beforeEach(module($provide => {
  parent = {
    doSomething: jasmine.createSpy('parent.doSomething')
  };
  Parent = jasmine.createSpy('Parent').and.returnValue(parent);
  $provide.value('Parent', Parent);
}));
但这不起作用。。。说间谍的“父母”从未被叫来

目前正在使用jasmine/karma进行测试。如何模拟/监视超类,以便我能够对调用父类的构造函数以及调用
super.doSomething
函数做出预期


谢谢

在计算
child class.js
之前,您需要覆盖
Parent
。稍后重新分配全局变量不会更改
Child
的继承链。请尝试
Object.setPrototypeOf(Child,jasmine.createSpy('Parent'))
Object.setPrototypeOf(Child.prototype,Parent)
。这将导致
super
调用他们的间谍目标。如何将
子类
封装到角度模块中?回答你的问题很重要question@just-鲍里斯——我编辑了这个问题,把它包括在内,谢谢!你打错了。应该有
ChildDeps.$inject=['Parent']