2016-11-23 7 views
11

私は関数呼び出しを模擬しようとしており、その中で別の関数を一度呼び出すことを期待しています。Jest - 関数呼び出しを模倣する

myFunctions.test.js

import { resetModal } from '../myFunctions.js'; 

describe('resetModal',() => { 
    it('calls the clearSomethingInModal function',() => { 
    const clearSomethingInModal = jest.fn(); 
    resetCreationModal(); 
    expect(clearSomethingInModal.mock.calls.length).toBe(1); 
    }) 
}) 

myFunctions.js

export resetModal() { 
    clearSomethingInModal() 
} 

しかし、冗談の出力は、それが呼び出されていないことを言います。もし誰かがこれをやるのが最善の方法を示せば、私はとても感謝しています。

答えて

16

clearSomethingInModalをテストファイルのコンテキスト内でのみモックしているため、あなたのアプローチはうまくいかないので、myFunction.jsclearSomethingInModalは依然として元です。主なポイントは、myFunction.jsで直接作成されたものをモックできないことです。あなたがあざけることができる唯一のことは、あなたのテストからそれらを呼び出すときに、あなたの関数に渡すimport clearSomethingInModal from 'clearSomethingInModal'

  • コールバックのようなあなたがmyFunction.jsにインポート

    1. モジュールを、ある

    これはあなたの場合は理にかなっていますmyFunction.jsをブラックボックスとして考えてみましょう。ここでは、インポートや関数の引数のようなものや、何が出てくるのかテストすることができます。しかし、箱の中で起こるものをテストすることはできません。ここ

    は、リスト内の2点

    myFunctions.test.js

    import { resetModal } from '../myFunctions.js'; 
    import clearSomethingInModal from 'clearSomethingInModal'; 
    
    jest.mock('clearSomethingInModal',() => jest.fn()) 
    
    describe('resetModal',() => { 
        it('calls the clearSomethingInModal function',() => { 
        resetCreationModal(); 
        expect(clearSomethingInModal.mock.calls.length).toBe(1); 
        }) 
    }) 
    

    myFunctions.js

    import clearSomethingInModal from 'clearSomethingInModal'; 
    
    export resetModal() { 
        clearSomethingInModal() 
    } 
    

    myFunctions.test.jsを反映する2つの例示されています

    import { resetModal } from '../myFunctions.js'; 
    
    describe('resetModal',() => { 
        it('calls the clearSomethingInModal function',() => { 
        const clearSomethingInModal = jest.fn(); 
        resetCreationModal(clearSomethingInModal); 
        expect(clearSomethingInModal.mock.calls.length).toBe(1); 
        }) 
    }) 
    

    myFunctions.js

    export resetModal(clearSomethingInModal) { 
        clearSomethingInModal() 
    } 
    
  • +1

    おかげアンドレアス、それは素晴らしい説明です。だから私はそれを取る私の機能の構造を変更することなく、私は私が望む方法でテストすることはできません。したがって、(a)それは関数の設計上の問題を暗示し、(b)現在の形式では、それに適用できる有効なテストが存在するでしょうか? 'resetModal'関数は、簡潔さのために省略した他の多くの関数も呼び出すことに注意してください –

    関連する問題