2016-10-19 5 views
3

私は、スナップショット試験にこのコードの抜粋しようとしています:ピッカーとピッカーを模倣する方法。

import 'react-native'; 
import React from 'react'; 
import TestComponent from './TestComponent'; 

import renderer from 'react-test-renderer'; 

describe('TestComponent',() => { 
    const asset = { 
    type: 'car', 
    } 
    it('renders correctly',() => { 
    const tree = renderer.create(
     <TestComponent 
     asset={asset} /> 
    ).toJSON(); 
    expect(tree).toMatchSnapshot(); 
    }); 
}) 

私の問題は、私が取得することである:

TypeError: Cannot read property '_tag' of undefined 

私は私のテストは今、この権利のように見える

import React, { Component } from 'react'; 
import { 
    Picker, 
} from 'react-native'; 

export default class TestComponent extends Component { 

    render() { 
    return (
     <Picker 
     selectedValue={this.props.asset.type} 
     onValueChange={this.props.onTypeChange}> 
     <Picker.Item label="Type of asset" value="default" /> 
     <Picker.Item label="Car" value="car" /> 
     <Picker.Item label="Boat" value="boat" /> 
     <Picker.Item label="Ship" value="ship" /> 
     </Picker> 
    ); 
    } 
} 

this issue

に基づいてそれを嘲笑すべきだと思う私は単純に追加しようとしている:

jest.mock('Picker',() => 'Picker') 

をしかしPicker.Itemはまだ私が無駄にしようとした

Invariant Violation: Element type is invalid: expected a string (for built- 
in components) or a class/function (for composite components) 
but got: undefined. Check the render method of `TestComponent`. 

他の変種嘲笑されていないので、それはまだエラーがスローより:

jest.mock('Picker',() => {return {Item: 'Item'}}); 
---------------------------------------------------- 
class Picker{ 
    Item = 'PickerItem' 
} 
jest.mock('Picker',() => { 
    return Picker; 
}); 

答えて

5

github issueも作成しました。ここには有効な回答があります:

jest.mock('Picker',() => { 
    const Picker = class extends Component { 
    static Item = props => React.createElement('Item', props, props.children); 
    static propTypes = { children: React.PropTypes.any }; 

    render() { 
     return React.createElement('Picker', this.props, this.props.children); 
    } 
    } 
    return Picker; 
}) 
関連する問題