gpt4 book ai didi

javascript - 在 Angular 2 的单元测试中模拟基类

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:13 25 4
gpt4 key购买 nike

我正在尝试编写一个单元测试以查看是否调用了基类方法

这是基类

export abstract class Animal{
protected eatFood() {
console.log("EAT FOOD!")
}
}

这是我要测试的类

export class Monkey extends Animal {
onHungry(){
this.eatFood();
}
}

这里是测试

class MockAnimal {
public eatFood() {
console.log("EAT MOCKED FOOD!");
}
}

describe('Monkey', () => {
beforeEach(() => {

TestBed.configureTestingModule({
declarations:[Monkey],
providers: [
{ provide: Animal, useClass: MockAnimal }
]
}
});

it('eat food when hungry', fakeAsync(() => {
let fixture = TestBed.createComponent(Monkey);
spyOn(fixture, 'eatFood');
fixture.componentInstance.onHungry();
expect(fixture.eatFood).toHaveBeenCalled();
}));
}

我无法让单元测试运行这个 MockAnimal 类。这是怎么测试的?

最佳答案

TestBed 用于测试组件,就像在普通的 NgModule 中一样,您可以定义声明、导入、提供程序……但是您想要测试的是一个简单的类。在测试中你必须手动初始化它:

describe('Monkey', () => {
it('eats if hungry', () => {
const monkey = new Monkey();
// spying will only work if 'eatFood' is public
const eatFoodSpy = spyOn(monkey, 'eatFood');

monkey.onHungry();

expect(eatFoodSpy).toHaveBeenCalled();
});
});

关于javascript - 在 Angular 2 的单元测试中模拟基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com