前言
我们在进行单元测试时,尽可能的将每个功能点拆分成独立的可测试的小功能。力求测试点的最小化。这样不仅测试时减少思维量,也使得对测试代码的修正简单。有时当我们无法对某个函数是否执行进行测试时,我们就需要用到间谍函数。
例子
情景引入
ngOnInit() {
this.loadData();
}
/*查询*/
onQuery() {
this.loadData(); // 直接调用数据加载函数
}
loadData() {
const queryParams = {
page: this.params.page,
size: this.params.size,
klassId: this.params.klass.id,
name: this.params.name.value,
sno: this.params.sno.value
};
...
}
当我们本着不造重复的轮子的原则对ngOnInit方法和onQuery方法相同部分写到一个方法里,再分别进行调用时。我们发现测试变成了loadData是否正确执行和ngOnInit方法和onQuery方法是否正确调用loadData方法两步,而后者如何进行测试呢?angular为我们提供了spyOn()方法。
替身方法
spyon方法使用方法如下
spyOn(Math, 'random').andReturn(0.1);
spyon有监听的意思,这句话的意思是说,当我们调用math类的random方法时,返回0.1