2017-07-31 17 views
1

私はチャートをレンダリングして何らかの操作を行うHOCの単体テストを書いています。チャートは、データベースから取得し、レデックスストアに格納されたデータを使用して生成されます。テストの目的のために、私は偽のデータストアを作成しましたが、グラフの読み込みデータはcomponentDidMountで発生し、小道具の値をチェックすることによって実行されます。だから、次のように私のコードは次のとおりです。React酵素小道具がマウントにセットされていません

... 
ComponentDidMount() 
{ 
    console.log(this.props.getData); 

    if (this.props.getData === "YES") 
     this.props.loadData(); 
} 
... 

を、次のように私のユニットテストのコードは次のとおりです。

... 
const mockStore = configureStore([thunk]); 
let fakeStore = mockStore({...}); 

it("loads data"), function() { 
    let store = fakeStore; 
    const options = { 
     context: {store}, 
     childContextTypes: {store: PropTypes.object.isRequired}, 
    }; 
    const mounted = mount(<Component getData="YES"/>, options); 
    console.log(mounted.props()); 
    mounted.instance().componentDidMount(); 
} 
... 

問題は、私はときに、コンポーネント小道具が設定されていない見ることができるにconsole.logを使用していますいくつかの値を指定しても、componentDidMountが自動的に実行されますが、そのプロップは直後です。関数を呼び出そうとすると、実行されませんが、なぜ正しく表示されなかったのかを示すメッセージは表示されません。

誰かに助言してもらえますか?

答えて

0

sinon libraryを使用して外部対話をモックすることができます。次に、コンポーネントのレンダリング時に擬似相互作用が呼び出されているかどうかを確認します。あなたが書いているのは、終わりから終わりまでのテストではなく単体テストです。だからそれはこのようにすべきです。

import React from 'react' 
import YourComponent from 'components/YourComponent' 
import { shallow } from 'enzyme' 
describe('(Component) YourComponent',() => { 
    let _props, _spies, _wrapper 

    beforeEach(() => { 
    _spies = {} 
    _props = { 
     prop1: 'value1', 
     prop2: 'value2', 
     ... 
     getData : (_spies.getData = sinon.spy()), 
    } 
    _wrapper = shallow(<YourComponent {..._props} />) 
    }) 


    it('Should trigger the `getData` callback when mounted',() => { 
    _spies.getData.should.have.been.called 
    }) 

}) 

これが役に立ちます。ハッピーコーディング!

+0

ご協力いただきありがとうございます。私は、関数呼び出しをテストするためにサイロンスパイを知っています。私が抱えている問題は、子コンポーネントとやりとりする関数をテストする必要があるため、子コンポーネントがテストに必要なものを生成するように、目的に応じて関数を実行する必要があるということです。私はデータのロードを修正することができました(コンポーネントの作成時に小道具をリセットして小道具を変更しようとすると無意味でした)。しかし、ロードされたデータを搭載したコンポーネントがありますが、テストの目的では関数を呼び出せません。 – Alister

+0

あなたの質問が示すように単体テストではありません。 e2eテストを書く。 –

関連する問題