2017-02-22 2 views
0

Ich möchte eine private Variable in einer Klasse StummelSinon Stub private Variable in Typoskript?

class IPC { 
    private publisher: redis.RedisClient; 
    constructor() { 
     this.publisher = redis.createClient(); 
    } 

    publish(text: string) { 
     const msg = { 
      text: text 
     }; 

     this.publisher.publish('hello', JSON.stringify(msg)); 
    } 
} 

Wie kann ich die private Variable publisher, innerhalb dieser Klasse Stummel? so konnte ich den Code testen, wie unten

it('should return text object',() => { 
    const ipc = sinon.createStubInstance(IPC); 
    ipc.publish('world!'); 

    // this will throw error, because ipc.publisher is undefined 
    assert.deepStrictEqual({ 
     text: 'world!' 
    }, ipc.publisher.getCall(0).args[0]) 
}) 

Antwort

0

Es gibt keine Art und Weise ist eine private Variable Stummel, und dies ist nicht der richtige Weg, es zu tun, könnten Sie die Diskussion weiter unten mit Christian Johansen sehen

https://groups.google.com/forum/#!topic/sinonjs/ixtXspcamg8

Die beste Ansatz, ist jede Abhängigkeit in den Konstruktor injizieren, sobald wir den Code umgestalten, könnten wir problemlos die Abhängigkeit mit unserem erforderlichen Verhalten Stub

0

Sie Typ Behauptung verwenden um kann gezeigt Zugriff auf die private Variable zu erhalten. Wie:

(ipc as any).publisher 
+0

aber wie kann ich st ub es? – Tim

+0

Meinst du: 'sinon.stub (ipc, 'publisher');'? –

+0

Ich möchte meinen Code wie oben gezeigt testen, aber ich kann es nicht erreichen, es wird sich beschweren 'Kann Eigenschaft 'getCall' von undefined nicht lesen, so weiß ich nicht, wie man den Test erreicht, den ich wollte .. – Tim

Verwandte Themen