我有一个简单的对象,我正在嘲笑,假设这样的事情:
function MyObject() {
this.SomeVariable = "some-value";
this.SomeFunction = function() { ... };
}
现在我想模拟我正在做的变量:
var mockedObject = mock(MyObject);
when(mockedObject).SomeVariable.thenReturn("some-other-value");
然而它告诉我,我不能在这上面使用thenReturn()...无法记住确切的错误,但有没有人知道解决这个问题的方法?或者我应该这样做:
var mockedObject = mock(MyObject);
mockedObject.SomeVariable = "some-other-value";
答案 0 :(得分:1)
您只能存根或验证交互(函数调用)。因为“SomeVariable”是对象中的属性,而不是对象中的函数,所以不能存根或验证对它的使用。
所以你的结论是正确的;您应该只提供您想要的值作为对象的属性:
var mockedObject = mock(MyObject);
mockedObject.SomeVariable = "some-other-value";
另一种选择,如果它是你自己的代码,则是改变原始对象而不是使用“getter”样式函数,例如:
function MyObject() {
this.SomeVariable = function() { return "some-value"; };
this.SomeFunction = function() { ... };
}
对于真正的“对象”,这通常是比使用属性更好的方法。