【问题标题】:Sinon: Test function return valueSinon:测试函数返回值
【发布时间】:2017-02-04 10:13:17
【问题描述】:

我正在使用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,但它给了我错误,我找不到任何可能的解决方案来检查它真正返回的内容。

【问题讨论】:

  • 你到底想断言什么?我猜你应该有 2 个数组,一个用于输入,第二个用于预期输出。因此,您只需断言使用该输入调用 getContainersByHostId 应该会返回预期的输出。这是你想要达到的目标吗?
  • 这正是我想要断言的。但是当我针对输出数组断言它时,它给了我未定义的。你能不能写一个例子我怎么能做到这一点。也许我做错了什么。我也会编辑我的问题

标签: unit-testing sinon spy enzyme


【解决方案1】:

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

如果我对您的理解正确,您所需要的一切都可以更轻松地实现。 诗乃完全不需要。比如:

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

【讨论】:

  • 好吧,我知道我在这里做了一些非常愚蠢的事情。你说的对。但我不确定我是否明白你的第一点。你说我必须指定返回值的地方?你能详细说明一下吗?我基本上想了解为什么它首先抛出undefined
  • 你所说的,你是说我不必监视或制作类方法的存根吗?既然,你直接就原函数断言了?我的印象是,我们应该用间谍或存根来做这件事吗?如果您能深入地向我解释这一点,我将非常感激。
  • 好的,因为在您的测试用例中有一个手动函数调用:instance.getContainersByHostId(containers); 您不需要监视或存根任何东西。当您不控制函数调用时,将使用存根或间谍。在大多数情况下,它们用于调用某些东西的情况,这会触发 spie 方法。至于指定返回值,我提到了stub.returns(obj); 这个方法使存根返回提供的值。您可以在此处仔细查看 Sinon api:sinonjs.org/docs
  • 伙计,这真的很有帮助。非常感谢。
  • 很高兴为您提供帮助! :)
猜你喜欢
  • 2015-07-25
  • 2019-05-07
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2021-04-02
  • 2017-09-25
相关资源
最近更新 更多