2017-04-26 4 views
1

Ich möchte eine Funktion testen. Diese Funktion benötigt auch andere Funktionen, aber diese andere Funktion wird mit Scherz verspottet.So testen und verspotten Sie eine Funktion Nodejs mit Jest

Hier ist meine Funktion

translate(args, cb) { 
    const transid = args.transid; 
    const language = args.language; 
    const defaultValue = args.defaultValue || ''; 

    if (transid === null || transid === '') { 
     return cb(new Error('Error. Need TransiD')); 
    } 
    if (language === null || language === '') { 
     return cb(new Error('Error. Need language')); 
    } 

    return this.translation(transid, language, defaultValue) 
     .then((res) => { 
     return cb(null, res); 
     }); 
    } 

Diese Funktion Notwendigkeit Funktion 'Übersetzung'. Im Testprozess werde ich es spotten.

Hier ist meine Funktion zum Testen

describe('Translator',() => { 
    describe('translate',() => { 

    it('Should return translated value', (done) => { 
     const args = { 
     transid: 1, 
     language: 'EN', 
     defaultValue: 'defaultValue', 
     } 
     const cb = jest.fn((err, res) => { 

     }); 
     translator.translation = jest.fn((transid, language, defaultValue) => { 
     // done(); 
     }) 

     translator.translate(args, cb); 
     done(); 
    }); 
    }) 
}) 

Ich bin immer noch verwirrend wie diese Funktion testen Jest mit und auch die erforderlichen Abhängigkeiten spöttisch. Ein paar Dinge

Antwort

0

kann ich sehen:

  • Sie können durch Rücksendung der Versprechen Kette mit Jest der done Funktion vermeiden, die Jest zu bestimmen, verwenden wird, wenn ein Test abgeschlossen ist.
  • Sie müssen nicht die Implementierung der Funktionen, nur ihre Rückgabewerte verspotten. Möglicherweise möchten Sie einen zusätzlichen Test erstellen, der das Implementierungsverhalten verspottet, aber es ist gut, mit der Kontrolle der Ausgabe zu beginnen.

Hier ist, wie der Test aussehen könnte:

describe('Translator',() => { 
    describe('translate',() => { 
    it('Should return translated value',() => { 
     const args = { 
     transid: 1, 
     language: 'EN', 
     defaultValue: 'defaultValue', 
     } 

     const cb = jest.fn(); 

     const res = {}; 

     translator.translation = jest.fn() 
     .mockReturnValue(Promise.resolve(res)); 

     return translator.translate(args, cb) 
     .then(() => { 
      expect(translator.translation).toHaveBeenCalledTimes(1); 
      expect(translator.translation) 
      .toHaveBeenCalledWith(1, 'EN', 'defaultValue'); 

      expect(cb).toHaveBeenCalledTimes(1); 
      expect(cb).toHaveBeenCalledWith(null, res); 
     }); 
    }); 
    }) 
}) 
Verwandte Themen