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']