【发布时间】:2017-06-11 16:32:36
【问题描述】:
我目前在监视 typescript 类中调用的继承方法时遇到问题,其中 toHaveBeenCalled() 方法返回 false,即使调用了被监视的方法。看下面的场景……
我有两个类,用 TypeScript 编写的
class Parent() {
buyFood() {
// buy food
}
}
class Husband extends Parent {
makeDinner() {
super.buyFood();
// make dinner;
}
}
在我对 Husband 类的测试中,我只关心测试制作晚餐的逻辑,因为超类的购买食物的逻辑是在它自己的测试套件中测试的。
因此,我的测试看起来像下面这样。
let husband:Husband = new Husband();
it('Should make a good dinner', () => {
spyOn(husband, 'buyFood');
husband.makeDinner();
expect(husband.buyFood).toHaveBeenCalled();
}
即使调用了buyFood(),断言也失败了,错误提示从Parent 类继承的方法丈夫.buyFood() 从未被调用过。
我应该如何解决这个问题,而不必通过 buyFood() 方法调用断言值更改?
【问题讨论】:
-
测试框架是否支持它的任何地方都有记录? JavaScript 中的继承充其量是善变的。
-
似乎没有任何对继承方法的引用...来自文档“间谍可以存根任何函数并跟踪对其的调用和所有参数。”
-
那么也许它没有走原型链。
标签: javascript inheritance typescript jasmine