Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JsMockito在一块地上打短线_Javascript_Mocking - Fatal编程技术网

Javascript JsMockito在一块地上打短线

Javascript JsMockito在一块地上打短线,javascript,mocking,Javascript,Mocking,我有一个简单的对象,我在模仿,假设如下: function MyObject() { this.SomeVariable = "some-value"; this.SomeFunction = function() { ... }; } 现在我想模拟变量,我正在做: var mockedObject = mock(MyObject); when(mockedObject).SomeVariable.thenReturn("some-other-value"); 但是它告诉我,

我有一个简单的对象,我在模仿,假设如下:

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";

您只能存根或验证交互(函数调用)。因为“SomeVariable”是对象中的一个属性,而不是对象中的函数,所以您无法存根或验证它的使用

所以你的结论是正确的;您只需提供所需的值作为对象的属性:

var mockedObject = mock(MyObject);
mockedObject.SomeVariable = "some-other-value";
如果是您自己的代码,另一种方法是将原始对象改为使用“getter”样式的函数,例如:

function MyObject() {
    this.SomeVariable = function() { return "some-value"; };
    this.SomeFunction = function() { ... };
}

对于真正的“对象”,这通常是一种比使用属性更好的方法。

实际对象基本上是一个枚举,您提出了一个很好的观点,也许它们应该是函数。。。谢谢你的回答!