2017-11-20 7 views
1

私はJestとEnzymeで私のReactアプリをスナップショットテストしています。高次コンポーネントでラップされていないテスト可能なバージョンのコンポーネントをエクスポートしようとしています。酵素がベース成分ではなく包まれた成分をレンダリングする

ラップされたコンポーネントを、私のアプリが使用できるように、またテスト可能なバージョン、つまりラップされていないバージョンのコンポーネントにエクスポートします。上記のようになりますスナップショットを生成

NavBar.jsx

const NavBar = ({props}) => {(
    <div>...</div> 
)} 

export { NavBar as TestableNavBar }; 

export default withStyles(styles)(NavBar); 

NavBar.test.js

import React from 'react'; 
import { shallow } from 'enzyme'; 
import toJson from 'enzyme-to-json'; 
import { TestableNavBar } from './NavBar'; 

const props = { 
    ... 
}; 

describe('Navbar',() => { 
    it('should render correctly',() => { 
    const wrapper = shallow(<TestableNavBar {...props} />); 
    const tree = toJson(wrapper); 
    expect(tree).toMatchSnapshot(); 
    }); 
}); 

この

は私のコンポーネントである

<div> 
    <withStyles(AppBar) 
    className="" 
    > 
    <withStyles(Toolbar) 
     disableGutters={true} 
    > 
     <withStyles(IconButton) 
     aria-label="open drawer" 
     className="" 
     color="contrast" 
     onClick={[Function]} 
     > 
     ... 
</div> 

まだHOCをレンダリングしようとしている理由を理解できませんか?

+0

本当にHOCをレンダリングしていますか?最初にレンダリングされる要素は、 'NavBar'戻り値で宣言された' div'です。 –

+0

@toomuchdesign true。しかし、あなたは私に少し混乱しているような、すべてのを持っています。彼らはなぜそこにいるのですか?また、このテストの出力は、デフォルトのエクスポートされたNavBar – Chris

答えて

0

Enzyme's shallow方法はただで宣言した子どもたちは法(AppBarToolbarなど)をレンダリングレンダリング、および出力は、それらが同じwithStyles HOCによって包まれていることを示しています。

ルートコンポーネントのテスト可能なバージョンをエクスポートすると、実際の出力(div)を実際にテストできますが、子コンポーネントがwithStyles HOCでラップされることはありません。

コンポーネントの最終出力をテストする場合は、Enzyme's mountレンダリング方法に切り替えることを検討してください。

+0

Okをレンダリングする場合と同じです。ありがとうございますtoomuchdesign。あなたがこれをテストすることをお勧めする別の方法がありますか、それとも私はちょうどそれと一緒に暮らさなければなりません – Chris

+0

私は個人的には親コンポーネントをテストし、別個のテストでは子供をテストします。ツリー全体をテストしたい場合、ツリーの完全なDOMレンダリングを実行するEnzymeのマウントを使用することができます。 (更新の回答を参照) –

関連する問題