javascript函数内部变量的测试值-sinon/chai

javascript函数内部变量的测试值-sinon/chai,javascript,unit-testing,sinon,chai,Javascript,Unit Testing,Sinon,Chai,我在React组件中具有以下功能: parentFunction: function(items){ let variableOfInterest = this.callThisFunction().toArray().filter((ele) => { if(obj[ele.get('id')]){ return ele } }).map((ele) => ele.get('id')) this.setState({newState:var

我在React组件中具有以下功能:

parentFunction: function(items){
  let variableOfInterest = this.callThisFunction().toArray().filter((ele) => {
    if(obj[ele.get('id')]){
      return ele
    }
  }).map((ele) => ele.get('id'))

  this.setState({newState:variableOfInterest})
}
我能够使用存根编写调用callThisFunction的测试,但无法确定是否可以使用sinon或chai监视variableOfInterest的值。我想写一个测试,在这里我可以传递一个参数,并使用'expect'测试结果的值。在最后返回值也没有什么意义,仅仅为了测试而这样做似乎是不必要的。 我还希望能够测试调用toArray()的结果,如果可能的话,还可以测试filter()。谢谢你的洞察力

这是我调用callThisFunction()的测试:

我想写一个测试,在这里我可以通过一个参数,并使用 “expect”用于测试结果的值

选项1:

您只需使用状态获取更新后的
newState
值,并将其与预期值进行比较

通过使用库测试React组件,可以非常轻松地完成这项工作。Ezyme还使用
mocha
chai
,因此语法几乎相同。如果您想使用spy和mock API,它还提供了一个spy和mock API,尽管在本例中可能不需要这样做

以下是通过浅层渲染获得的API示例:

const wrapper = shallow(<MyComponent />);
expect(wrapper.state().foo).to.equal(10);
expect(wrapper.state('foo')).to.equal(10);
const wrapper=shallow();
expect(wrapper.state().foo).to.equal(10);
expect(wrapper.state('foo'))等于(10);
因此,您需要为具有
parentFunction
的组件编写测试,对该组件进行浅装,模拟调用
parentFunction
,然后获取
状态
并检查其值

选项2:


如果您不想检查状态,或者想为
variableOfInterest
的计算编写更复杂的测试,您可以尝试将计算代码移动到其他函数中,并为该函数编写测试。

除非
variableOfInterest
后面的代码有副作用,否则它是死代码,可以简单地删除。这个变量在代码中的任何地方都没有使用。@marvinhagemeister它是用来设置状态的。你说得对,我错过了!抱歉造成混淆。您是否无法直接检查/断言
状态
?或者,您可能需要考虑Sturgs< Cuth> StStest来检查它所调用的参数是否是您期望的(或要声明的)参数。您可以详细说明如何实现选项1吗?
const wrapper = shallow(<MyComponent />);
expect(wrapper.state().foo).to.equal(10);
expect(wrapper.state('foo')).to.equal(10);