2016-10-24 19 views
1

私はenzymeを使っていくつかのテストを書いていますが、私は奇妙な動作をしています。ここに私のテストがあります:なぜ酵素はテーブルで 'tr'を見つけられないのですか?

import React from 'react' 
    import { TypeTable } from 'routes/Type/components/TypeTable' 
    import { shallow } from 'enzyme' 
    import { Table } from 'react-toolbox' 

    // ... 

    let _props, _wrapper 

    beforeEach(() => { 
    _props = { 
     getTypes: sinon.spy(), 
     types: [ 
     { name: 'type 1'}, 
     { name: 'type 2'} 
     ] 
    } 
    _wrapper = shallow(<TypeTable {..._props} />) 
    }) 

    it('Should render a <Table>',() => { 
    expect(_wrapper.is(Table)).to.be.true 
    }) 

    it('should render 2 rows',() => { 
    expect(_wrapper.find('tbody').find('tr')).to.have.length(2) 
    }) 

最初のテストが動作しています。二つ目は、動作していない(アサーションが失敗している:expected { Object (root, unrendered, ...) } to have a length of 2 but got 0

をしかし、私は私の_wrapperの内容を印刷する場合、私の第二の試験では、私が取得console.log(_wrapper.html())を使用して[OK]を、どのように思わ

'<table data-react-toolbox="table"> 
    <thead> 
    <tr> 
     <th>name</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr data-react-toolbox-table="row"> 
     <td>type 1</td> 
    </tr> 
    <tr data-react-toolbox-table="row"> 
     <td>type 2</td> 
    </tr> 
    </tbody> 
</table>' 

いくつか含まれていますtr

私は何かを忘れましたか?

答えて

4

shallowは、サブコンポーネントを「レンダリング」しません。子コンポーネントではなく単一のコンポーネントをテストするために使用されます。私は、浅いの代わりにmountを使用すると、あなたが望むものをテストできると思います。

シャローレンダリングは、コンポーネントを1つの単位としてテストすること、およびテストで子コンポーネントの動作が間接的にアサートされないようにすることに役立ちます。

+0

これは正常ですが、 '_wrapper.html()'は私に正しいhtmlを返しますか? – ThomasThiebaud

+0

はい。浅いとマウントの違いは時々混乱します。私が問題を抱えているとき、私は通常それらをチェック/切り替えます。 たとえば、私は通常、実際の出力の代わりに子コンポーネントに小道具がどのように渡されるかをテストするときにmountを使用します。 – Amida

+0

ありがとう、私は慎重になるでしょう – ThomasThiebaud

関連する問題