如何用茉莉花窥探价值属性(而不是方法)
2022-08-30 04:05:24
Jasmine's可以很好地改变方法的行为,但是有没有办法改变对象的值属性(而不是方法)?代码可以如下所示:spyOn
spyOn(myObj, 'valueA').andReturn(1);
expect(myObj.valueA).toBe(1);
Jasmine's可以很好地改变方法的行为,但是有没有办法改变对象的值属性(而不是方法)?代码可以如下所示:spyOn
spyOn(myObj, 'valueA').andReturn(1);
expect(myObj.valueA).toBe(1);
2017年2月,他们合并了一个PR,增加了这个功能,他们于2017年4月发布。
因此,为了监视您使用的 getters/setter:其中 myObj 是您的实例,“myGetterName”是您的类中定义为该实例的名称,第三个参数是 type 或 .const spy = spyOnProperty(myObj, 'myGetterName', 'get');
get myGetterName() {}
get
set
您可以使用已用于使用 创建的间谍的相同断言。spyOn
例如,您可以:
const spy = spyOnProperty(myObj, 'myGetterName', 'get'); // to stub and return nothing. Just spy and stub.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.returnValue(1); // to stub and return 1 or any value as needed.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.callThrough(); // Call the real thing.
这是github源代码中的一行,如果您有兴趣,可以使用此方法。
而间谍就在这里
回答最初的问题,使用茉莉花2.6.1,你会:
const spy = spyOnProperty(myObj, 'valueA', 'get').andReturn(1);
expect(myObj.valueA).toBe(1);
expect(spy).toHaveBeenCalled();
有什么理由你不能直接在对象上更改它?这并不是说javascript强制执行对象上属性的可见性。