2017-08-19 1 views
0

Je veux remplacer la classe réelle avec une fausse classe avec sinon classe stub Sinon et en retournant une autre

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()); 

Cependant, j'ai essayé plusieurs options, mais je ne suis pas à travailler avec la fausse classe. Des idées?

Répondre

0

J'ai trouvé la solution

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

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