我正在尝试检查是否使用 sinon 调用了存根 getter。
我将我的用例简化如下:
export class MyClass {
public method() {
return 5;
}
public get property() {
return 5;
}
}
it("stubs getter", () => {
const myClass = sinon.createStubInstance(MyClass);
const stub = sinon.stub(myClass, "property").get(() => 10);
expect(myClass.property).toBe(10); // passes
expect(stub.called).toBe(true); // fails
});
存根吸气剂显然正在工作,但我似乎无法验证它是否已被调用,并且我在文档中找不到任何可以提供帮助的内容。
这是因为您正在存根
get
访问器,但您正在监视属性本身。换句话说,该属性永远不会被调用 - 因此called
是错误的 - 但它的 getter被调用。您应该存根 getter并创建一个间谍:
sinon 的间谍文档解释了这种行为,尽管可以说不是很好:
https://sinonjs.org/releases/v17/spies/