2017-02-27 6 views
0

Ich versuche, Methoden in einem importierten Modul zu testen, während ich ein separates Modul teste. Ich bin in der Lage, das importierte Modul mit ES2015-Importsyntax erfolgreich zu verspotten, aber der Schein bleibt während des gesamten Tests konsistent und es gibt Fälle, in denen ich den Schein ändern möchte.Zurücksetzen des Werts eines Mocked-Moduls in einem Jest-Komponententest

Aussehen Meine Dateien wie diese

// ModuleA 
import ModuleB from 'ModuleB' 

// ... code 

// TestCase 
import ModuleA from 'ModuleA' 
import ModuleB from 'ModuleB' 

jest.mock('ModuleB',() => { 
    return { 
    value: true 
    } 
} 

describe('ModuleA',() => { 
    it('returns true',() => { 
    // This test expects ModuleB.value to return true 
    }); 

    it('returns false',() => { 
    // This doesn't work 
    ModuleB.value = jest.fn(() => false) 
    // This doesn't work either 
    jest.mock('ModuleB',() => { 
     return { 
     value: false 
     } 
    }); 
    // This test expects ModuleB.value to return false in order to pass 
    }); 
}); 

ich essentailly brauchen Mocks für ModuleB zu trennen. In der Vergangenheit konnte ich einfach var ModuleB = require('ModuleB'); anstelle von import verwenden und dann bei Bedarf ModuleB.someMethodName = jest.fn() anrufen. Ich möchte jedoch nur ES2015 für diese Tests verwenden, und das Verwenden des Musters, das ich gerade erwähnt habe, gibt mir einen ModuleB is read-only Fehler.

Antwort

0

Verwenden Sie die requireActual Methode:

Um sicherzustellen, dass eine manuelle Mock und seine tatsächliche Umsetzung Aufenthalt in sync, es nützlich sein könnte, die reale Modul benötigen mit require.requireActual (Modulname) in Ihrem Handbuch Mock und Ändern Sie es mit Scheinfunktionen, bevor Sie es exportieren.

Zum Beispiel:

const RealModule = require.requireActual('Form'); 
    const MyModule = { 
    RealThing: RealModule.RealThing, 
    …add some mocks 
    }; 

Referenzen

Verwandte Themen