2017-02-22 15 views
0

Я хотел бы окурок приватную переменную внутри классаSinon stub частная переменная в машинописном тексте?

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

Как окурок приватную переменную publisher, внутри этого класса? , чтобы я мог проверить код, как показано ниже

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]) 
}) 

ответ

0

Там нет никакого способа незавершенного частные переменного, и это не правильный способ сделать это, вы можете увидеть ниже обсуждение с христианским Йохансен

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

Лучшим подход, заключается в том, чтобы вводить любую зависимость в конструктор, как только мы реорганизуем код, мы могли бы легко заглушить зависимость с нашим требуемым поведением

class IPC {  
    constructor(private publisher: redis.RedisClient) { 

    } 


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


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



it('should return text object',() => { 
    sinon.stub(redis, 'createClient') 
     .returns({ 
      publish: sinon.spy() 
     }); 
    const publisherStub = redis.createClient(); 


    const ipc = new IPC(publisherStub) 
    ipc.publish('world!'); 


    // this is working fine now 
    assert.deepStrictEqual({ 
     text: 'world!' 
    }, publisherStub.publish.getCall(0).args[0]) 

    sinon.restore(redis.createClient) 
}) 
0

Вы можете использовать утверждение типа для того, чтобы получить доступ к закрытой переменной. Как:

(ipc as any).publisher 
+0

но как я могу ub это? – Tim

+0

Вы имеете в виду: 'sinon.stub (ipc, 'publisher');'? –

+0

Я хотел бы проверить свой код, как показано выше, но я не могу его достичь, он будет жаловаться 'Невозможно прочитать свойство getCall 'неопределенного', поэтому я не знаю, как достичь теста, который я хотел. – Tim

Смежные вопросы