2016-10-19 3 views
3

내가 테스트를이 코드 조각을 스냅 샷하는 것을 시도하고있다 :피커와 피커를 모의하는 법.

내 테스트 지금이 바로 보이는
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> 
    ); 
    } 
} 

는 :

TypeError: Cannot read property '_tag' of undefined 

I을 :

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(); 
    }); 
}) 

내 문제는 내가 얻을 수 있다는 것입니다 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; 
}) 
관련 문제