2017-05-04 10 views
0

私はES6のbabel-node環境でテストしています。私は、私がインポートしているメソッドの内部で使用されているメソッドを嘲笑したい。難しい部分は、模擬したいメソッドが、テストしたいメソッドが存在するファイルにインポートされているということです。私はproxyquire、babel-plugin-rewireを調べましたが、他のインポートの中にインポートされたメソッドでそれらを動作させることはできません。読書から様々なギターの問題まで、私はこれが既知の制限/欲求不満であるかもしれないと感じる。これは不可能なのか、何か不足していますか?別のインポートの中でインポートされたメソッドを模擬する方法

proxyquireまたはbabel-plugin-rewireを使用してもエラーは発生しません。メソッドはちょうど嘲笑されず、メソッドの標準値を返します。

ここでは、インポート状況の一般的な例を示します。

// serviceLayer.js 

getSomething(){ 
    return 'something'; 
} 


// actionCreator.js 

import { getSomething } from './serviceLayer.js'; 

requestSomething(){ 
    return getSomething(); <------- This is what I want to mock 
} 


// actionCreator.test.js 

import test from 'tape'; 
import {requestSomething} from 'actionCreator.js' 

test('should return the mock' , (t) => { 
    t.equal(requestSomething(), 'something else'); 
}); 
+0

テスト済みファイルを変更できる場合は、依存性注入技術を使用して問題を解決できます。 その一部はhttp://jasonpolites.github.io/tao-of-testing/ch3-1.1.htmlに記載されています。 これは、たとえばgetSomething関数をrequestSomethignの引数として渡すことで実行できます。 –

+0

@FrankBessouええ、私は議論としてそれを渡すことができたことを知っています。それが必要であれば恐ろしいことではないだろうが、私はすべての方法に追加の議論を加える必要がないことを本当に望んでいた。見ていただきありがとうございます。 – mpls423

+0

すべてのメソッドに同じ関数が必要な場合でも、この関数をクラスコンストラクタに引き渡すことができます。 –

答えて

0

私はここで自分の質問に答えるよ...私は間違ってバベル - プラグインのReWireを使用していたが判明。成功した結果をどのように使用しているかの例を以下に示します。

// serviceLayer.js 

    export const getSomething =() => { 
    return 'something'; 
    } 


    // actionCreator.js 

    import { getSomething } from './serviceLayer.js'; 

    export const requestSomething =() => { 
    return getSomething(); <------- This is what I want to mock 
    } 


    // actionCreator.test.js 

    import test from 'tape'; 
    import { requestSomething, __RewireApi__ } from 'actionCreator.js' 
    __RewireApi__.Rewire('getSomething' ,() => { 
    return 'something else'' 
    }); 

    test('should return the mock' , (t) => { 
    t.equal(requestSomething(), 'something else'); 
    }); 
関連する問題