2017-04-10 15 views
4

最後に、私のコンポーネントをReact.createClass()からES6クラスに更新しています。私が使用してfetchSomeData()をスタブする方法:私は私のテストで見ている最初のエラーがjscodeshift -t react-codemod/transforms/class.jsが私の質問がある React - プロパティ初期化子構文を使用するコンポーネントメソッドをスタブする方法はありますか?

すなわち

class Foo extends React.Component { 
    componentWillMount() { 
    this.fetchSomeData(this.props); 
    } 
    componentWillReceiveProps(nextProps) { 
    if (nextProps.someProp !== this.props.someProp) { 
     this.fetchSomeData(nextProps); 
    } 
    } 
    fetchSomeData = (props) => { 
    ... 
    }; 
    render() { 
    ... 
    } 
} 
、プロパティの初期化の提案を使用するために私のコンポーネントのメソッドを変換するので、私の sinon.stub()通話の一部が失敗しているということですこの新しい構文? fetchSomeDataがもうプロトタイプにないので、私のテストはのようになります。

ありがとうございます!

+1

ES7は昨年リリースされた*(2016)。プロパティの初期化子は* proposal *です。 –

+0

テストでコンポーネントのインスタンスにアクセスできますか?もしそうなら、あなたはsinon.stub(componentInstance、 'fetchSomeData')を実行し、次にcomponentInstance.render()を実行することができます。 – jeznag

+0

@jeznag良い点、ありがとう。それを考えなかった。しかし、私は酵素がレンダリングライフサイクルを処理させるようにしました。そして、それを介することは私にとって良い解決策になるとは思いません。 – mulleady1

答えて

3

この例では、fetchSomeData()は実際にthisに接続され、Foo.prototypeには接続されません。したがって、インスタンスを作成する前にメソッドをスタブすることは絶対にありません。この問題を回避するには、fetchSomeData()のロジックをにスタブする別の場所に移動します。または、別の構文を使用してメソッドを定義します。

関連する問題