2017-02-27 6 views
0

別のモジュールをテストしている間に、インポートされたモジュールでメソッドをモックアウトしようとしています。インポートされたモジュールをES2015インポート構文でうまく模倣することができましたが、モックはテスト全体を通して一貫していて、モックを変更したい場合があります。Jestユニットテストで模擬モジュールの値をリセットする

私のファイルは、私がessentailly ModuleBのためのモックを分離する必要があり、この

// 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 
    }); 
}); 

のように見えます。これまではimportの代わりにvar ModuleB = require('ModuleB');を使用してから、必要に応じてModuleB.someMethodName = jest.fn()に電話することができました。私はこれらのテストにES2015だけを使用したいと思いますが、今述べたパターンを使用するとModuleB is read-onlyというエラーが出ます。

答えて

0

requireActualメソッドを使用します

は手動モックと同期してその実際の実装でのご滞在には、あなたのマニュアルモックでrequire.requireActual(moduleNameの)を使用して、実際のモジュールを必要とすることが有用であるかもしれないことを確実にするためにとそれをエクスポートする前にモック関数で修正しています。例えば

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

参照

関連する問題