【问题标题】:Mocking class in Sinon.js and instanceofSinon.js 和 instanceof 中的模拟类
【发布时间】:2014-11-20 04:31:42
【问题描述】:

我想模拟某个类的一些对象,但是发现了这个错误:

function MyClass(){}

var myInstance = new MyClass();
var mock = sinon.mock(myInstance);

console.log(mock instanceof MyClass); // false

如果单元在构造函数中检查完全相同的 instanceof,我如何将此模拟传递给被测单元?

我知道,那个 stub 解决了这个问题,但我需要完全 Mock。

谢谢 =)

【问题讨论】:

    标签: javascript unit-testing mocking instanceof sinon


    【解决方案1】:

    如果我没记错的话,Sinon mocks 包装了它们的关联对象,而不是直接采用它们的原型链,这意味着instanceof 永远不会像你想要的那样工作。

    如果您有能力更改被测单元,请考虑检查传入对象上是否存在重要属性,而不是其原型链。例如,如果您的单位使用MyClassfoo 方法,则让单位检查typeof o.foo === 'function' 而不是o instanceof MyClass

    【讨论】:

    • 当然,这是一个解决方案 - 以鸭子类型的样式检查实例,但它与 instanseof 的母语功能相比有点 hacky。
    【解决方案2】:

    问题是错误的。

    我不需要将mock 传递给被测单元,我仍然需要传递myInstance 对象,然后验证mock

    new SUT(myInstance);
    mock.verify();
    

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 2017-02-17
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2018-02-07
      • 2015-12-09
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多