我有暴露发电机的实用功能:如何窥探静态发生器功能?
export class Utility {
// provides a generator that streams 2^n binary combinations for n variables
public static *binaryCombinationGenerator(numVars: number): IterableIterator<boolean[]> {
for (let i = 0; i < Math.pow(2, numVars); i++) {
const c = [];
//fill up c
yield c;
}
}
}
现在,我使用如下这种发电机在我的代码:
myFuncion(input){
const n = numberOfVariables(input);
const binaryCombinations = Utility.binaryCombinationGenerator(n);
let combination: boolean[] = binaryCombinations.next().value;
while (till termination condition is met) {
// do something and check whether termination condition is met
combination = binaryCombinations.next().value;
}
}
在我的单元测试(使用茉莉花)我想在终止之前验证生成器函数被调用的次数(即生成了多少个组合)。以下是我所尝试的:
it("My spec",() => {
//arrange
const generatorSpy = spyOn(Utility, "binaryCombinationGenerator").and.callThrough();
//act
//assert
expect(generatorSpy).toHaveBeenCalledTimes(16); // fails with: Expected spy binaryCombinationGenerator to have been called 16 times. It was called 1 times.
});
但是,这个断言失败,因为binaryCombinationGenerator
确实被调用过一次。我实际上想要窥探的是next
方法IterableIterator
。
但是,我不知道该怎么做。请建议。
+1谢谢您的回答。但是,为了模拟发生器,我需要更多东西。我已经发布了我的解决方案作为答案。如果你有兴趣,你可以看看。 –