ignite

다 태워버려라. 아하핫!

이프리트가 생각나는 아침입니다. 아, 물론 이 포스트가 아침에 딜리버리 될꺼란 보장은 없습니다.

오늘 소개해 드릴 프로젝트는 “React-Native” 를 할 건데 좋은 샘플 혹은 boilerplate를 찾는 개발자에게는 아주 좋은 소식입니다!

2016/06/26 Editor’s choice

infinitered/ignite
_ignite - The unfair starting CLI, Generator, and more for React Native_github.com


설치해 봅시다

npm을 이용해서 먼저 글로발 커맨드로 지정합니다.

$npm install -g react-native-ignite

그리고 나서

$ignite new MyApplication

을 해 주면 훌륭하게 프로젝트가 생성이 됩니다.

중간중간 프로젝트를 다운로드를 하면서 다운로드 시간은 1분 이하, 빌드시간은 30초 이하 뭐 이런 거짓부렁을 시전합니다. 최근 Mac 프로에 LTE네트워크에서 3분,1분 정도 더 걸린거 같습니다.

asciinema. 아래 링크를 클릭하셔야 됩니다. 아래 링크를

Asciinema 결과
_Recorded by keen_asciinema.org

일련의 과정이 마무리 되고 나면 ignite 앱이 완성이 됩니다.

$cd MyApplication

해서 폴더에 들어간 뒤

$react-native run-ios

해 주시면

이런 훌륭한 화면을 볼 수 있습니다.


왜 좋은 boilerplate 일까요?

제가 react-native를 개발하면서 어려움을 겪었던 부분 중에 하나가 테스트 프레임워크와 애니메이션등의 부분인데 이 프로젝트의 dependency를 확인하면 이런 가려운 부분들을 잘 버무려 놓았을 거 라는 일말의 기대감을 갖게 합니다.

react-native-mock 과 reactotron등은 조만간 한번 다뤄봐야 할 거 같고, AVA 같은 test-runner 도 확인을 해 보고 리뷰해야 할 거 같네요.

다음은 FullButton의 테스트 코드 입니다.

import test from 'ava'  
import React from 'react'  
import FullButton from '../../App/Components/FullButton'  
import { shallow } from 'enzyme'

test('component structure', t =\> {  
const wrapper = shallow(<FullButton onPress={() =\> {}} text='hi' /\>)

t.is(wrapper.name(), 'TouchableOpacity') // the right root component  
t.is(wrapper.children().length, 1) // has 1 child  
t.is(wrapper.children().first().name(), 'Text') // that child is Text  
})

test('onPress', t =\> {  
let i = 0 // i guess i could have used sinon here too... less is more i guess  
const onPress = () =\> i++  
const wrapper = shallow(<FullButton onPress={onPress} text='hi' /\>)

t.is(wrapper.prop('onPress'), onPress) // uses the right handler  
t.is(i, 0)  
wrapper.simulate('press')  
t.is(i, 1)  
})

By Keen Dev on June 26, 2016.

Exported from Medium on May 31, 2017.