2017-10-04 4 views
0

Je veux me moquer d'une méthode de classe ES6.Sinon stub indéfini avec les tests node.js et moka

Je module l'importation de modèles:

// test.js 
const models = require(path.resolve('./models')); 

Dans les modèles folder il y a un index.js et il redirige vers index.js dans le dossier utilisateur tout en appelant models.user:

// models/index.js 
models.user = user; 

Ensuite, J'ai une classe d'utilisateurs dans index.js: // modèles/utilisateur/index.js

class User extends Model { 
    // simplified exists - it returns boolean or thows an error 
    static async exists(username) { 
    if (username) { 
     returns true 
    } else { 
     throw new Error('bad output'); 
    } 
    } 
} 

Je wàn t pour stub exister (nom d'utilisateur) méthode avec stub sinon.

que je fais:

const sinon = require('sinon'); 
const models = require(path.resolve('./models')); 

describe.only('generateTokenBehavior()', function() { 
    it('should return 200 given valid username and password', function() { 
     ... 
     const stub = sinon.stub(); 
     stub(models.user.prototype, 'exists').callsFake(true); 
     ... 
    }); 

et je reçois une erreur sur la ligne avec talon:

TypeError: Cannot read property 'callsFake' of undefined 

Quel est le problème avec ce code? Je faisais des recherches sur ce problème sur des questions de pile similaires, mais je n'ai pas trouvé la réponse.

Répondre

1

Le problème ici est que le résultat de l'appel sinon.stub() en fonction retourne non définie.

const sinon = require('sinon'); 
const models = require(path.resolve('./models')); 

describe.only('generateTokenBehavior()', function() { 
    it('should return 200 given valid username and password', function() { 
     ... 
     const stub = sinon.stub(models.user.prototype, 'exists').callsFake(true); 
     ... 
    }); 

Pour référence, la documentation est ici: http://sinonjs.org/releases/v4.1.1/stubs/#properties

Je ne vous blâme pas pour cela d'écrire la façon dont vous avez fait - la documentation est un peu trompeur.