2017-08-17 4 views
3

J'utilise Mocha et sinon pour espionner un appel de fonction. La fonction est appelée correctement mais l'espion ne la suit pas.Sinon, la fonction d'espion est appelée mais pas suivie

Voici le module je teste

export default (() => { 

    function test1(){ 
     console.log('called second func'); 
     return 5; 
    } 

    function callThis(){ 
     console.log('called first func'); 
     test1(); 
    } 

    return { 
     test1, 
     callThis 
    }; 

})(); 

et est ici le test

import Common from './common'; 

describe('spy test',() => { 
    var setSpy = sinon.spy(Common, 'test1'); 

    Common.callThis(); 

    var result = setSpy.called; 

    it(`does the test`,() => { 
     expect(result).to.equal(true); 
    }); 

}); 

J'appelle essentiellement la première fonction mais que vous voulez vérifier la deuxième fonction est appelée à la suite. Les journaux de la console me disent que cela se produit, mais l'espion retourne faux et ne remarque pas la chose qu'il espionne. Est-ce que je manque quelque chose?

Répondre

5

Lorsque vous appelez sinon.spy(Common, 'test1');, vous modifiez le champ test1 sur l'objet Common pour le remplacer par un espion. Toutefois, le code que vous avez dans common.js appelle test1directement au lieu d'appeler test1à travers l'objet que votre module exporte. Par conséquent, lorsque vous faites Common.callThis(), l'espion n'est pas touché, et vous obtenez l'erreur que vous avez observée.

est ici un fichier common.js modifié qui permettrait à votre test de passer:

export default (() => { 

    var obj = {}; 

    obj.test1 = function test1(){ 
     console.log('called second func'); 
     return 5; 
    } 

    obj.callThis = function callThis(){ 
     console.log('called first func'); 
     // This calls `test1` through `obj` instead of calling it directly. 
     obj.test1(); 
    } 

    return obj; 
})();