2017-04-06 11 views
4

ES6モジュール:私のユニットテストのために、私は冗談を使用していますJestでプライベート関数を模倣する方法はありますか?私は次のようにルックスをテストしたい

function privateFunction() { 
    ... 
} 
export function publicFunction() { 
    ... does something ... 
    privateFunction() 
    ... does something else ... 
} 

を、私はpublicFunctionをテストする方法を見つけようとし、それをからかっによってprivateFunctionの実行を回避していますが、私は模擬試行で成功することができませんでした。何か案が?

+0

をお願いしていますプライベート関数のテストを書く方法や、プライベート関数を擬似する方法 –

+0

良い点。嘲笑の解決策で十分ですが、嘲笑/テストの両方には、テストからプライベート機能にアクセスするための解決策が必要です。 – matteo

答えて

6

babel-plugin-rewireモジュールを使用して私の私的機能を模擬する方法を見つけました。

"devDependencies": { 
    ... 
    "babel-plugin-rewire": "1.0.0-beta-5", 
    "babel-jest": "18.0.0", 
    ... 

.babel.rc では、私は次のようしている:

{ 
    "presets": [ 
    "es2015", 
    "stage-0", 
    "react" 
    ], 
    "env": { 
    "test": { 
     "plugins": [ 
     "babel-plugin-rewire" 
     ] 
    } 
    }, 
    ... 

この時点で私は模擬することができた

package.jsonでは、私は以下の持っていますプライベート関数:あなたは

import * as moduleToTest from './moduleToTest.js' 

describe('#publicFunction',() => { 
    it('mocks private function',() => { 
    moduleToTest.__Rewire__('privateFunction',() => { console.log('I am the mocked private function') }) 
    ... 
    }) 
}) 
+0

私はこの嘲笑機能をテストすることができますかは不明です。 expect()のコンテキストで、再配線された関数をどのように使うのですか? – Lounge9

2

のJavaScriptの性質による方法はありません。関数は、モジュールの範囲にバインドされたので、この機能は、外部からの存在することを知っする方法、それを模擬する方法の機能にアクセスせず、最終的にする方法はありません。

たぶんもっと重要な、あなたは試験中の対象物の内部にのみ公開APIでテストべきではありません。原因はそれが重要なすべてです。パブリックAPIが安定している限り、内部的にどのような処理が行われるかについては誰も気にしません。

+3

私は「テープ」と「AVA」を使用していた私は、「バベル・プラグインのReWire」を使用してプライベートの機能を模擬することができました。プライベート機能のテストについては、TDDの原則に違反するため、私は同意しません。 – matteo

関連する問題