Sinon存根类并返回另一个

时间:2017-08-19 16:18:03

标签: javascript node.js mocking sinon es6-class

我想用一个带有sinon的假类替换真正的类

class FakeClass {
  constructor() {
    console.log('FakeClass::constructor');
    this.name = 'FakeClass';
  }

  test() {
    return this.name;
  }
}

class RealClass {
  constructor() {
    console.log('RealClass::constructor');
    this.name = 'RealClass';
  }

  test() {
    return this.name;
  }
}


const ns = {
  FakeClass,
  RealClass
}

sinon.stub(ns, 'RealClass').callsFake(FakeClass);
// sinon.stub(ns.RealClass, 'prototype').returns(FakeClass.prototype);
// sinon.stub(ns.RealClass.prototype, 'constructor').callsFake(FakeClass.prototype.constructor);

const realClass = new ns.RealClass();
console.log(realClass.test());

但是,我尝试了多种选择,但我没有让它与假类一起工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案

sinon.stub(ns, 'RealClass').returns(new FakeClass()); // works!!

const realClass = new ns.RealClass();
assert.equal(ns.RealClass.calledWithNew(), true);
console.log('name', realClass.test());