Sinon:测试函数返回值

时间:2016-09-26 22:39:35

标签: unit-testing sinon spy enzyme

我正在使用Sinon Enzyme进行测试。我有一个函数,它接受一个对象数组并将其转换为一个新的不同数组。

getContainersByHostId(data) {
    return _.chain(data)
      .groupBy('hostId')
      .toPairs()
      .map(currentItem => _.zipObject(['hostId', 'containers'], currentItem))
      .value();
  }

参数数量:

const containers = [{
          id: 'c_01',
          hostId: 'h_01',
          hostIp: '192.168.1.0',
          name: 'Some Container'
        }];

结果:

[{hostId: 'h_01',
containers: [{
hostId: 'h_01',
ip: '192.168.1.0',
id: 'c_01',
name: 'Some Container'
}]}];

这很好用。但是,我面临的问题是单元测试。所以目前我有这个。

const containers = [{
          id: 'c_01',
          hostId: 'h_01',
          hostIp: '192.168.1.0',
          name: 'Indigo Container'
        }];

        const wrapper = shallow(<Groups {...props} />);
        const instance = wrapper.instance();
        sandbox.stub(instance, 'getContainersByHostId');
        instance.getContainersByHostId(containers);
        expect(instance.getContainersByHostId.calledWith(containers)).to.equal(true);
      });

如何测试传递的args是否等于新数组?

更新

我已经尝试了returnValue但是它给了我错误,我找不到任何可能的解决方案来检查它真正返回的内容。

1 个答案:

答案 0 :(得分:3)

首先,当你对一个函数进行存根时,你取消它的所有行为,所以如果你没有为这个存根指定一些值来返回它,那么它将返回undefined。很可能你把它与sinon.spy()混淆了。

如果我理解正确你所需要的一切都可以更容易实现。根本不需要 Sinon 。类似的东西:

const modified = instance.getContainersByHostId(inputArray);    
expect(modified).to.eql(expectedArray);