2017-09-28 3 views
0

J'ai un scénario dans lequel j'ai besoin de remonter une méthode getter sur String.prototype. Dans ce cas, une méthode définie par le module NPM colors.Utilisation de la méthode get-to-get de la méthode sinon.ibot String.prototype

it('should only apply colors if enable in the .ENV file', function() { 
    var stringGreyStub = sinon.stub(String.prototype, 'grey').get(function(){ 
     console.log('FAKE!'); 
    }); 
    Log.setLevel(1); 
    Log.log('Message to log.', 1); 
    console.log(stringGreyStub.called); 
}); 

La sortie du test ci-dessus est:

FAKE! 
[28/Sep/2017:08:06:13-0700] This is some message to be logged! 
false 

Il semble aussi loin que je peux dire au talon est appelé parce que FAKE! est en cours connecté. Cependant, la valeur de stringGreyStub.called est toujours false. Des idées sur ce que je pourrais faire de mal?

Répondre

0

Cela semble être la façon dont fonctionne Sinon quand il s'agit de getters et setters. La solution consiste à utiliser un stub pour la valeur de getter réelle et de vérifier si elle est appelée.

it('should only apply colors if enable in the .ENV file', function() { 
    var getterStub = sinon.stub(); 
    sinon.stub(String.prototype, 'grey').get(getterStub); 
    Log.setLevel(1); 
    Log.log('Message to log.', 1); 
    console.log(getterStub.called); 
}); 

La solution a été trouvée dans le problème de github suivant.

https://github.com/sinonjs/sinon/issues/1545