对从方法调用的方法进行单元测试
Unit test a method called from a method
我有一个 angular 应用程序和一个点击时触发的方法。在这个方法中,我将一个值传递给另一个私有方法。
.ts 文件
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.anotherMethod(ids);
}
.spec 文件
it('should trigger a method on view item', () => {
component.onViewItem(documents[0]);
expect(component.onViewItem).toHaveBeenCalled();
});
如何测试线路 const ids = [item.data['id']];
并检查 this.anotherMethod(ids);
的调用
您必须监视要确保参数的方法。
spyOn(NameOfTheComponent, 'anotherMethod')
expect(NameOfTheComponent.anotherMethod).toHaveBeenCalledWith([IDEXPECTED])
有一个很好的做法:检查预期结果,避免检查中间调用了哪个方法。这将使测试易于维护。
让我们用一个例子来探索它。
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.anotherMethod(ids);
}
public anotherMethod(ids: number[]): void {
this.ids = ids;
}
有哪些测试选项?我看到两个:
差一个
监视 anotherMethod
:
it('should trigger a method on view item', () => {
spyOn(NameOfTheComponent, 'anotherMethod')
component.onViewItem(documents[0]);
expect(component.anotherMethod).toHaveBeenCalledWith([documents[0].id]);
});
好一个
测试预期结果:
it('should trigger a method on view item', () => {
spyOn(NameOfTheComponent, 'anotherMethod')
component.onViewItem(documents[0]);
expect(component.ids).toEqual([documents[0].id]);
});
为什么好的更好?假设您重构了 onViewItem
方法。现在看起来像这样:
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.ids = ids;
}
论据相同。方法执行产生的结果也完全相同。如果你有一个函数的间谍,你将被迫重构测试。如果您刚刚测试了预期的结果 - 您就可以开始了。
我有一个 angular 应用程序和一个点击时触发的方法。在这个方法中,我将一个值传递给另一个私有方法。
.ts 文件
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.anotherMethod(ids);
}
.spec 文件
it('should trigger a method on view item', () => {
component.onViewItem(documents[0]);
expect(component.onViewItem).toHaveBeenCalled();
});
如何测试线路 const ids = [item.data['id']];
并检查 this.anotherMethod(ids);
您必须监视要确保参数的方法。
spyOn(NameOfTheComponent, 'anotherMethod')
expect(NameOfTheComponent.anotherMethod).toHaveBeenCalledWith([IDEXPECTED])
有一个很好的做法:检查预期结果,避免检查中间调用了哪个方法。这将使测试易于维护。
让我们用一个例子来探索它。
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.anotherMethod(ids);
}
public anotherMethod(ids: number[]): void {
this.ids = ids;
}
有哪些测试选项?我看到两个:
差一个
监视 anotherMethod
:
it('should trigger a method on view item', () => {
spyOn(NameOfTheComponent, 'anotherMethod')
component.onViewItem(documents[0]);
expect(component.anotherMethod).toHaveBeenCalledWith([documents[0].id]);
});
好一个
测试预期结果:
it('should trigger a method on view item', () => {
spyOn(NameOfTheComponent, 'anotherMethod')
component.onViewItem(documents[0]);
expect(component.ids).toEqual([documents[0].id]);
});
为什么好的更好?假设您重构了 onViewItem
方法。现在看起来像这样:
public onViewItem(item: Results): void {
const ids = [item.data['id']];
this.ids = ids;
}
论据相同。方法执行产生的结果也完全相同。如果你有一个函数的间谍,你将被迫重构测试。如果您刚刚测试了预期的结果 - 您就可以开始了。