2016-12-23 3 views
0

У меня есть проект, на который я пишу тесты Jest. У меня есть определенный модуль, который определяется следующим образом:Проверьте, что частная функция, определенная в модуле, вызывается с правильными аргументами из публичной функции из того же модуля (с использованием Jest).

export default function main(arg) { 
    /* do some stuff with arg */ 
    sub(arg); 
} 

function sub(arg) { 
    return; 
} 

Я бы хотел проверить, что main calls sub содержит правильные аргументы. Я попытался это:

import main from './tiny'; 

describe('main function',() => { 
    it('calls sub with correct arguments',() => { 
    let sub = jest.fn(); 
    main('hello world'); 
    expect(sub).toHaveBeenCalled(); 
    expect(sub).toHaveBeenCalledWith('hello world'); 
    }); 
}); 

Но этот тест всегда терпит неудачу с:

main function › calls sub with correct arguments 

    expect(jest.fn()).toHaveBeenCalled() 

Я новичок в модульного тестирования и насмешливый, поэтому я уверен, что это легко, но я полностью застрял. Пожалуйста помоги!

ответ

0

В случае, если кто считает, что это, я сделал это работать со следующими (несколько некрасивых) модами:

Экспорт функции и называют его от экспорта:

export default function main(arg) { 
    /* do some stuff with arg */ 
    exports.sub(arg); 
} 

export function sub(arg) { 
    return; 
} 

Импорт экспорт то объект перезаписать метод с модулем:

import main, * as tiny from './tiny'; 

describe('main function',() => { 
    it('calls sub with correct arguments',() => { 
    tiny.sub = jest.fn(); 
    main('hello world'); 
    expect(tiny.sub).toHaveBeenCalled(); 
    expect(tiny.sub).toHaveBeenCalledWith('hello world'); 
    }); 
});