2017-07-06 5 views
0

Ich habe Probleme Werte in die Datei im Test Einfügen:Jest Mock - Einfügen von Werten in getestet Datei

import device from '../device' 

let execute =() => { 
    if (device.isAndroid()) { 
    return true 
    else { 
    return false 
    } 
} 

Jetzt für die Testdatei:

jest.mock('../device') 
import device from '../device' 

describe('when the device is Android',() => { 
    let device 

    beforeEach(() => { 
    device = jest.fn().mockImplementation(() => { 
     return { 
     isAndroid:() => { return true } 
     } 
    }) 
    }) 

    it('returns true',() => { 
    let results = execute() 
    expect(result).toEqual(true) 
    }) 
}) 

Der Test schlägt fehl und gibt false . Was mache ich falsch?

Antwort

1

Sie benötigen '../device' mit einem Scherz Spion und der Mock-Implementierung auf, dass zu verspotten:

jest.mock('../device',()=>{return {isAndroid: jest.fn()}}) 
import device from '../device' 

describe('when the device is Android',() => { 

    beforeEach(() => { 
    device.isAndroid.mockImplementation(() => true) 
    }) 

    it('returns true',() => { 
    let results = execute() 
    expect(result).toEqual(true) 
    }) 
}) 
+0

Vielen Dank für Ihre Antwort, aber ich bin die folgenden Fehler bekommen: 'Typeerror: device.isAndroid ist keine Funktion - bei Ausführen (src/execute.js). TypeError: Die Eigenschaft 'mockImplementation' von undefined - at Object kann nicht gelesen werden. (src/test/execute.spec.js) 'Irgendwelche Ideen? – Ben

+1

Nicht sicher, habe meine Antwort aktualisiert, um den Mock direkt auf 'isAndroid' zu verschieben. –

+0

Erstens, du bist ein Genie !! Ich habe es zur Arbeit gebracht. Bitte aktualisieren Sie die obige Antwort und ich werde es als korrekt markieren (nur sicherstellen, dass andere nicht in die Irre gehen). Die erste Zeile sollte 'jest.mock ('../ device',() => {return {isAndroid: jest.fn()}}) sein. Auch 'let device' entfernen, da das Gerät bereits durch die import-Anweisung definiert ist . Das macht es funktioniert. – Ben