2015-09-07 17 views
5

Voglio testare un JS che usa una terza lib per recuperare i dati, quindi sto usando jest mock per quell'implementazione. Funziona quando lo chiamo direttamente nel test. Tuttavia, non funziona quando viene utilizzato nel codice sorgente.l'implementazione jest mock non funziona con require ('')

Ecco il codice

//Source implementation 

var reference = require('./reference'); 

module.exports = { 
    getResult: function() { 
    return reference.result(); 
    } 
}; 


//Test code 

jest.dontMock('./foo'); 
jest.dontMock('console'); 

describe('descirbe', function() { 
    var foo = require('./foo'); 

    it('should ', function() { 
    var reference = require('./reference'); 

    reference.result.mockImplementation(function (a, b, c) { 
     return '123' 
    }); 

    console.log(foo.getResult()); // undefined 
    console.log(reference.result()); // 123 
    }); 

}); 

risposta

2

Il vostro ordine del richiede sono sbagliate. Quando hai bisogno di ./foo prima di configurare il tuo simulato reference allora foo s reference sarà indefinito come per Jock automocking.

jest.dontMock('./foo');                                                     

describe('descirbe', function() {                                                   
    it('should ', function() {                                                    
     var reference = require('./reference');                                                
     reference.result.mockImplementation(function (a, b, c) { 
      return '123'; 
     });                                                
     var foo = require('./foo');                                                   

     console.log('ferr', foo.getResult()); // ferr 123                                                 
    });                                                          
}); 
2

La linea

var foo = require('./foo');

viene valutato in describe e memorizzato in foo.

Successivamente, nel blocco it, lo stai deridendo, ma questo non si applica al vecchio riferimento foo.

Inserendo foo dopo la chiamata mockImplementation verrà risolto l'errore.

//Test code 

jest.dontMock('./foo'); 
jest.dontMock('console'); 


describe('describe', function() { 

    it('should ', function() { 
    var reference = require('./reference'); 

    reference.result.mockImplementation(function (a, b, c) { 
     return '123' 
    }); 
    var foo = require('./foo'); 

    console.log(foo.getResult()); // undefined 
    console.log(reference.result()); // 123 
    }); 

});