2017-10-03 9 views
2

Mobx注入と嫌がらせをしてコンポーネントをテストする際に問題があります。 これはコンポーネントです:Mobx注入コンポーネントをテストする

@inject("mainStore") @observer 
export default class TestContainer extends React.Component { 
    sum(a, b) { 
     return a + b; 
    } 
    render() { 
     return <div className="TestContainer">phhhaz</div> 
    } 
} 

これはテストです:

describe('TestContainer',() => { 
it('knows that 2 and 2 make 4',() => { 
    const wrapper = shallow(<TestContainer mainStore={{}} />); 
    expect(wrapper.instance().sum(2,2)).toBe(4); 
}); 
}); 

私はこのエラーを取得しています:それは起こっている理由

TypeError: wrapper.instance(...).sum is not a function 

は、私が知っているが、私はそうではありませんそれを解決する方法を知っている。

+0

'浅い'の代わりに 'mount'を試しましたか? – Tholle

+0

はい私はしました... エラー:グローバルドキュメントをロードせずに 'mount()'と呼んでいるようです。 –

+0

[** jsdom **](https://github.com/airbnb/enzyme/blob/master/docs/guides/jsdom.md)のようなヘッドレスブラウザを使用できます。 – Tholle

答えて

2

問題は、注入コンポーネントを浅くレンダリングしていることです。また、ラッピングコンポーネント(Hoc)なので、独自のコンポーネントをテストしているわけではありません。 TestContainerをレンダリングしてテストする代わりに、TestContainer.wrappedComponentをレンダリングしてテストする必要があります。詳細については、https://github.com/mobxjs/mobx-react#testing-store-injection

関連する問題