我尝试使用sinon创建一个存根示例,并在存根中使用特定的属性值。
这是我的代码:
// MyClass
export default class MyClass {
public constructor(public readonly myParameter: string) {}
}
// MyClass test
import MyClass from "../src/index";
import sinon from "sinon";
describe("stubs", () => {
it("should pass", () => {
const myClass = sinon.createStubInstance(MyClass);
sinon.stub(myClass,'myParameter').value('a');
expect(myClass.myParameter).toBe("a");
});
});
字符串
但是这不起作用。我得到的错误是:
TypeError: Cannot stub non-existent property myParameter
型
注意事项:我还检查了问题是否是提升的构造函数属性或它是readonly
的事实,但似乎不是这样,我在类体中的public myParameter: string
也有同样的问题。
我已经尝试了来自this question,但它不工作,我不,如果这是因为这是一个存根示例,而不是一个简单的存根,但我不知道如何让它工作。
Sandbox link的
1条答案
按热度按时间tpgth1q71#
根据我的理解来回答我自己的问题:
TS代码:
字符串
基本上可以转换为一个JS类,比如:
型
由于我使用了
createStubInstance
,这确实会导致构造函数没有被调用,因此myParameter
没有在示例上被设置,所以sinon
不存在是正确的。对我有效的直接解决方案是基于@jonrsharpe的建议。我需要以某种方式确保属性存在,然后才能将其存根,例如:
型
这看起来可能毫无意义(对于字符串值来说确实如此),但对于更复杂的类型,你可以很容易地遵循这种方法,例如,如果你的属性是另一个类,例如,你可以这样做:
型