필요한 rpm 설치

npm install typescript jest ts-jest @types/jest ts-node
npm i -D puppeteer jest-puppeteer
npm i -D @types/puppeteer @types/jest-environment-puppeteer @types/expect-puppeteer
npm i -D cross-env

tsconfig.json 수정

{
  "compilerOptions": {
  ..........
    "types": [
      "jest",
      "puppeteer",
      "jest-environment-puppeteer",
      "expect-puppeteer"
    ],
  ..........
  },
  "exclude": [
    "node_modules"
  ]
}

프로젝트 루트에 아래와 깉이 설정 파일들을 생성한다. 

preset.js 생성

const ts_preset = require('ts-jest/jest-preset')
const puppeteer_preset = require('jest-puppeteer/jest-preset')

module.exports = Object.assign(
  ts_preset,
  puppeteer_preset
)

jest.config.js 생성

module.exports = {
    preset: "./preset.js",
    testMatch: ["**/tests/*.test.(ts|tsx)"]
};

jest-puppeteer.config.js

module.exports = {
  launch: {
    headless: false,
    timeout: 20000,
  },
};

package.js에 아래 명령어 추가

//.........
  "scripts": {
    "test": "cross-env DEBUG=test JEST_PUPPETEER_CONFIG=./jest-puppeteer.config.js jest --colors --runInBand --detectOpenHandles --config=./jest.config.js"
  },
//.........

프로젝트 루트에 tests폴더 생성 및 테스트 파일 uitest.test.ts 생성

describe('Naver', () => {
  beforeAll(async () => {
    await page.setViewport({ width: 960, height: 540 });
    await page.goto('https://www.naver.com')
  })

  it('should display "naver" text on page', async () => {
      await expect(page.title()).resolves.toMatch('NAVER');
  })

  it('search keyword', async () => {
    await page.type('input[type=search]', 'develogs', {delay: 20})
    await delay(1000);
    const inputElement = await page.$(
      'button[type=submit]',
    );
    if(inputElement) {
      await inputElement.click();
    }
    await delay(1000);
    await page.screenshot({ path: 'search_result.png' }); // 결과 화면 스크린샷
    await delay(1000);
})
})

function delay(ms: number): Promise<void> {
	return new Promise((resolve, reject) => {
    	setTimeout(() => {
          resolve()
    	}, ms)
    })
}

테스트 명령어

npm run test

UI 테스트 자동화 결과

 

UI 테스트 중 특정 화면을 캡쳐할 수 있음.

 

'Log' 카테고리의 다른 글

carthage에서 googlemaps 사용하기  (1) 2019.10.20
Flutter vs. React Native  (2) 2019.09.28
심심해서 Flutter로 만든 TODO앱  (0) 2019.09.23
cocoapods cache 삭제  (0) 2019.09.22
Flutter sqflite에서 like 사용하기  (0) 2019.09.22

1. binary 사용하는 방법

GoogleMaps.json파일 만든 후 아래와 같이 추가

{

    "3.1.0" : "https://dl.google.com/dl/cpdc/d308af63f78a5a1a/GoogleMaps-3.1.0.tar.gz"

}

 

Cartfile에 위에서 만든 GoogleMaps.json을 추가

binary "GoogleMaps.json" ~> 3.1.0i

 

2. 누군가 올려놓은 github 사용하는 방법

Cartfile에 아래 github 추가

github "leoneparise/GoogleMaps-Carthage" ~> 2.7

 

https://github.com/leoneparise/GoogleMaps-Carthage

'Log' 카테고리의 다른 글

NodeJS Typescript Jest와 Puppeteer로 UI Test 자동화 하기  (1) 2023.08.16
Flutter vs. React Native  (2) 2019.09.28
심심해서 Flutter로 만든 TODO앱  (0) 2019.09.23
cocoapods cache 삭제  (0) 2019.09.22
Flutter sqflite에서 like 사용하기  (0) 2019.09.22

[그림1. Swift로 만든 날씨 앱]
[그림2. React Native로 만든 날씨 앱]
[그림3. Flutter로 만든 TODO 앱]

  React Native는 작년에 해봤고, 몇 주전엔 Flutter로도 앱을 만들어 보았다. React Naitve는 Web(html, css, js)과 거의 유사한 구조로 개발을 할 수 있게 되어 있어서 러닝 커브가 매우 적었다. 동일한 앱을 만드는데 [그림 1] 익숙한 Swift로는 반나절 정도 걸렸고 [그림 2] react native로는 공부 포함 하루 이틀 정도 걸렸다. flutter는 Dart라는 새로운 언어를 학습해야 하지만, 이전에 java나 C++, C#, swift등 oop언어를 다뤄본적 있다면 쉽게 익힐 수 있다. [그림 3] Flutter로 만든 TODO앱도 공부 포함 이틀 정도 걸린 것 같다. 

 

  개인적인 취향으로 js를 별로 선호하지 않으며, open source 기반으로 서드 파티들에게 디팬던시가 강한게 싫어서 react native보단 flutter가 더 마음에 든다. 앞으로 개인적인 프로젝트는 flutter로 진행할 것 같다. 

 

  Flutter React Native
만든 회사

Google

카메라, 네비게이션 기능 같은것을 구글이 직접 모든것을 지원함

Facebook

페이스북이 모든것을 지원하지 않으며, open source 기반으로 외부 라이브러리에 의존해야함.

따라서, 플랫폼이 뭔가 큰 변경사항이 있을때 각 서드파티들이 호환성을 맞출때까지 기다려야함.

공식 출시 2018 년 12 월 Google I / O 2015 년 3 월, F8 컨퍼런스
프로그래밍 언어 Dart (Object Oriented Programming) Javascript (Functional Programming)
핫 리로드 지원 지원
생태계

아직 성숙하지 않음

커뮤니티가 별로 없고 인터넷에 자료가 얼마 없음

성숙함

커뮤니티 활발하고 자료도 많고 open source도 많음

성능 AOT를 지원하며 Native로 배포됨, 성능 좋음 JIT로 컴파일 되며, VM에서 동작하기 때문에 Flutter 보단 느림 (하지만, 일반적인 동작엔 체감 못느낌)
UI

Indicator, Button, Label 같은 기본 위젯들이 iOS, Android와 UI가 동일하게 표시됨.

UI는 Dart를 사용하여 declarative syntax 방식으로 표현함.

각 위젯들이 Host 기반으로 각각 ios, android UI에 맞게 표현됨.

UI는 Javascrip로 declarative syntax 방식으로 표현하며, color같은 style은 웹과 유사한 css로 디자인함

결론  기존에 android나 ios같은 native programming을 했던 사람이라면 react native보단 flutter를 더 잘 맞을 듯. 웹을 했던 사람이라면 html, css로 UI를 작성하고 로직을 javascript로 작성하는 것이 익숙할테니, 이와 비슷한 react native가 잘 맞을 듯.

 

 

  주말에 심심해서 flutter 공부하면서 만든 간단한 TODO + D-Day앱

공부 + 구현하는데 2틀정도 걸린듯. 개인적으로 react native보단 괜찮은거 같다. 

'Log' 카테고리의 다른 글

NodeJS Typescript Jest와 Puppeteer로 UI Test 자동화 하기  (1) 2023.08.16
carthage에서 googlemaps 사용하기  (1) 2019.10.20
Flutter vs. React Native  (2) 2019.09.28
cocoapods cache 삭제  (0) 2019.09.22
Flutter sqflite에서 like 사용하기  (0) 2019.09.22

 rm -rf ~/Library/Caches/CocoaPods; rm -rf Pods; rm -rf ~/Library/Developer/Xcode/DerivedData/*; pod deintegrate; pod setup; pod install;

  보통 flutter에서 query를 사용할때, query에 ?를 사용하고 whreArgs로 대체하는데, 이상하게 Like만 해당 방법이 먹히지 않느다.  그래서 아래와 같이 whreArgs를 사용하지 않고 $로 바꾸니 정상적으로 동작한다. 아마 버그인듯하다. 

 

await db.rawQuery("select * from tbl_todo where title like '%$keyword%'");

 

'Log' 카테고리의 다른 글

NodeJS Typescript Jest와 Puppeteer로 UI Test 자동화 하기  (1) 2023.08.16
carthage에서 googlemaps 사용하기  (1) 2019.10.20
Flutter vs. React Native  (2) 2019.09.28
심심해서 Flutter로 만든 TODO앱  (0) 2019.09.23
cocoapods cache 삭제  (0) 2019.09.22

+ Recent posts