2017-01-23 7 views
2

Я пытаюсь проверить react-native-camera модуль с jestКак насмехаться с реакцией-родной камерой со шуткой?

Так что я следующий package.json:

{ 
    "name": "app", 
    "version": "0.0.1", 
    "private": true, 
    "main": "index.js", 
    "license": "MIT", 
    "scripts": { 
    "start": "node node_modules/react-native/local-cli/cli.js start", 
    "test": "jest" 
    }, 
    "dependencies": { 
    "react": "~15.4.0-rc.4", 
    "react-native": "0.40.0", 
    "react-native-camera": "^0.5.1" 
    }, 
    "devDependencies": { 
    "babel-eslint": "^7.1.1", 
    "babel-jest": "18.0.0", 
    "babel-preset-react-native": "1.9.1", 
    "jest": "18.1.0", 
    "react-test-renderer": "~15.4.0-rc.4" 
    }, 
    "jest": { 
    "preset": "react-native" 
    } 
} 

И дал следующую Component, как это в example:

import React from 'react'; 
import Camera from 'react-native-camera'; 

class CameraComponent extends React.Component { 
    constructor(props: Props) { 
    super(props); 

    this.camera = null; 

    this.state = { 
     camera: { 
     aspect: Camera.constants.Aspect.stretch, 
     captureTarget: Camera.constants.CaptureTarget.cameraRoll, 
     type: Camera.constants.Type.back, 
     orientation: Camera.constants.Orientation.auto, 
     flashMode: Camera.constants.FlashMode.auto, 
     } 
    }; 
    } 

    render() { 
    return (
     <Camera 
      ref={(cam) => { 
      this.camera = cam; 
      }} 
      style={styles.preview} 
      aspect={this.state.camera.aspect} 
      captureTarget={this.state.camera.captureTarget} 
      type={this.state.camera.type} 
      flashMode={this.state.camera.flashMode} 
      defaultTouchToFocus 
      mirrorImage={false} 
     /> 
    ); 
    } 
} 

const styles = StyleSheet.create({ 
    preview: { 
    flex: 1 
    } 
} 

Так ниже приведено сообщение об ошибке:

TypeError: Cannot read property 'Aspect' of undefined

import 'react-native'; 
import React from 'react'; 
import Index from '../index.ios.js'; 

import renderer from 'react-test-renderer'; 

it('renders correctly',() => { 
    const tree = renderer.create(
    <Index /> 
); 
}); 

ответ

3

Чтобы исправить, создавший react-native-camera реагировать компонент в __mocks__ папка:

import React from 'react'; 

const constants = constants = { 
    Aspect: {}, 
    BarCodeType: {}, 
    Type: {}, 
    CaptureMode: {}, 
    CaptureTarget: {}, 
    CaptureQuality: {}, 
    Orientation: {}, 
    FlashMode: {}, 
    TorchMode: {} 
}; 

class Camera extends React.Component { 

    static constants = constants 
    render() { 
    return null; 
    } 
} 

Camera.constants = constants; 

export default Camera; 

и модифицированный тест, добавив следующие строки:

import mockCamera from '../__mocks__/Camera'; 

jest.mock('react-native-camera',() => mockCamera); 
2

Вы должны дразнить его, используя имя библиотеки и имя компонента, как это:

jest.mock('react-native-camera',() => 'Camera');

Больше информации здесь: https://facebook.github.io/jest/docs/tutorial-react-native.html#tips

+0

спасибо, но я напуган, это не тот путь, я получаю ту же ошибку. – locropulenton

+0

Вы также импортируете его в свой тест? «импортировать камеру из« реакции-родной камеры »; ' –

+0

Да, но похоже, что они нуждаются в' константе' в конструкторе – locropulenton