2017-07-06 4 views
2

umgehen Ich verwende ts-jest und jest meine Testdateien mit Typoskript schreiben.wie mit Jest Mock Funktion eines Moduls und Typoskript Typ

Ich bin verwirrt, wie man die Scheinfunktion eines Moduls eingibt.

Hier ist mein Code:

./module.ts:

import {IObj} from '../interfaces'; 

const obj: IObj = { 
    getMessage() { 
    return `Her name is ${this.genName()}, age is ${this.getAge()}`; 
    }, 

    genName() { 
    return 'novaline'; 
    }, 

    getAge() { 
    return 26; 
    } 
}; 

export default obj; 

./module.test.ts:

import * as m from './module'; 

describe('mock function test suites',() => { 

    it('t-1',() => { 
    // I think the jest.Mock<string> type here is not correct. 
    m.genName: jest.Mock<string> = jest.fn(() => 'emilie'); 
    expect(jest.isMockFunction(m.genName)).toBeTruthy(); 
    expect(m.genName()).toBe('emilie'); 
    expect(m.getMessage()).toEqual('Her name is emilie, age is 26'); 
    expect(m.genName).toHaveBeenCalled(); 

    }); 

}); 

wie m die Mock-Funktion genName von Modul geben?

typescript geben Sie mir einen Fehler hier: Error:(8, 7) TS2540:Cannot assign to 'genName' because it is a constant or a read-only property.

Antwort

0

Sie wollen das Modul verhöhnen und dann in sich die exportierte Funktion verändern. Dies sollte ersetzen Ihre Import-Anweisung.

jest.mock('./module',() => ({ 
    genName: jest.fn().mockImplementation(() => 'emilie') 
}))