【问题标题】:Testing object not modified in NodeJS Test在 NodeJS 测试中未修改的测试对象
【发布时间】:2014-01-24 21:57:36
【问题描述】:

我正在尝试找到测试对象参数不被函数更改的最佳方法。

想象一下这个函数什么都不做:

function underTest (someObject) {
    //It does nothing
}

现在我想测试 arg 没有被函数中化。 我知道几乎没有人会做这样的测试,但我是一个整合者(也是一个菜鸟^^)

it("Do not modify params", function () {
    var myObj = { property : 1, other : 3};
    underTest(myObject);
    //??? So
});

问题是:您将如何实现这一目标?

重复对象?

it("Do not modify params", function () {
    var myObj = { property : 1, other : 3};
    underTest(myObject);
    assert.deepEqual({ property : 1, other : 3}, myObj);
});

在函数中使用之前使用框架克隆它?

it("Do not modify params", function () {
    var myObj = { property : 1, other : 3};
    var clone = clonerFunction(myObj);
    underTest(myObj);
    assert.deepEqual(clone, myObj);
});

使用 sinonJS 的解决方案(已用于 spy/stub on function)?

【问题讨论】:

    标签: node.js unit-testing mocha.js sinon


    【解决方案1】:

    在我看来,如果一个对象不是一个大对象,最好克隆它(或它的一部分),顺便说一下,nodejs utils 中有一个有用(但未记录)的函数,即“_extend”为您完成这项工作。

    但实际上,我觉得您不应该在模块的范围内这样做(或实施任何类型的测试),并且只在将对象的副本公开给其他模块使用时才传递它们。这是因为,理想情况下,您会知道您的代码是如何工作的并且不会滥用它,从而避免因大量有效性检查而减慢它的速度,并且只对外部引入的错误保持警惕。

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多