스토리북(Storybook)은 한 문장으로 정의가 어려울 정도로 다양한 방식으로 사용되고 있는 UI 컴포넌트 개발 도구
.단순히 회사의 UI 라이브러리를 내부 개발자들을 위해 문서화(documentation)하기 위해서 사용할 수 있고,
외부 공개용 디자인 시스템(Design System)을 개발하기 위한 기본 플랫폼으로도 사용할 수 있다.
SDD
스토리 코드를 작성하며 UI 업데이트하는 것!
test 관점에서 storybook은 수동 테스트를 쉽게 도와준다.
예를 들어, storybook이 없다면 로그인 => 시나리오 만족 => 화면 이라는 귀찮은 프로세스를 거쳐 (수동)테스트를 하지만
storybook 을 이용하면 바로 원하는 화면으로 갈 수 있다.
이 를 위해 ui의 다양한 케이스에 대한 story(storybook의 단위)를 작성하고 UI를 작성하면 원하는 화면을 한 번에 볼 수 있을 뿐만 아니라
이 구현 과정에서 props들이 자연스럽게 분리가 되게 되는 효과를 얻을 수 있다.
import React from "react";
import List from "./List";
export default {
title: "Example/List",
component: List,
};
//story1. 할 일이 없을 때
export const EmptyTemplate = () => <List tasks={[]} />;
//story2. 할 일이 있을 때
export const TodoList = () => (
<List
tasks={[
{ id: 1, title: "할일 #1" },
{ id: 2, title: "할일 #2" },
{ id: 2, title: "할일 #3" },
]}
/>
);
storyshots
storybook은 story snapshot 기능을 제공
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Example/List Empty Template 1`] = `
<p>
할 일이 없어요!
</p>
`;
exports[`Storyshots Example/List Todo List 1`] = `
<ol>
<li>
할일 #1
<button
onClick={[Function]}
type="button"
>
완료
</button>
</li>
<li>
할일 #2
<button
onClick={[Function]}
type="button"
>
완료
</button>
</li>
</ol>
`;
storyshots-puppeteer
puppeteer는 접속한 페이지를 스크린샷을 찍거나 PDF로 제공한느 tool
storyshots-puppeteer 는 puppeteer의 이러한 기능을 이용하여
위의 텍스트 파일로 snapshot을 뜨는 Enzyme과 storyshots 달리
이미지 파일로 snapshot을 제공
6. 요약 및 결론
react 에서 TDD 를 효율적으로 하기 위해서는
unit 테스트를 위한 '관심사의 분리' 원칙하에서 코드를 작성하는 것이 좋고
이를 구현할 수 있는 디자인 패턴으로는 'container + presenter 패턴 그리고 redux 사용' 이 있다.
container 와 redux은 적극적으로 TDD를 적용하며 작성하는 것이 좋고
UI에 해당하는 presenter 컴포넌트들은 로직이 없기 때문에 TDD보다는
화면 시나리오에 따라 컴포넌트를 개발하도록 돕는 SDD을 적용하여 개발하는 것이 더 좋다고 판단된다.
SDD을 통해 작성된 story 들을 storyshot이나 storyshots-puppeteer 등을 이용하여 자동으로 테스트를 할 수 있기 때문에
시간적인 이득을 볼 수도 있다.
목차
출처
1. TDD (Test-Driven-Development))란
TDD 란 무엇인가 :
소프트웨어 개발 프로세스 Production code 전에 테스트는 먼저 작성
테스트의 필요성
Life cycle of TDD
Benefits
Myths (근거 없는 믿음)
2. unit test
TDD는 unit 테스트를 강제(force)한다. TDD 는 unit test를 이용하여 코드의 작은 부분을 테스트
unit tes(단위 테스트 )란
Unit test 프레임 워크
3. TDD 와 react 그리고 디자인 패턴
unit test 를 위해 => 관심사의 분리, Single Responsibility Principle
container + presenter 패턴 그리고 redux
예제 코드 : 할 일의 목록 관리하는 List
List.js
List.test.js
ListContainer.js
ListContainer.test.js
reducer.js
reducer.test.js
4. snapshot 테스트
Enzyme 을 이용한 snapshot test, snapshot은 텍스트 파일
테스트 결과
5. SDD (Story-Driven-Development)
Storybook이란
스토리북(Storybook)은 한 문장으로 정의가 어려울 정도로 다양한 방식으로 사용되고 있는 UI 컴포넌트 개발 도구 .단순히 회사의 UI 라이브러리를 내부 개발자들을 위해 문서화(documentation)하기 위해서 사용할 수 있고, 외부 공개용 디자인 시스템(Design System)을 개발하기 위한 기본 플랫폼으로도 사용할 수 있다.
SDD
스토리 코드를 작성하며 UI 업데이트하는 것! test 관점에서 storybook은 수동 테스트를 쉽게 도와준다. 예를 들어, storybook이 없다면 로그인 => 시나리오 만족 => 화면 이라는 귀찮은 프로세스를 거쳐 (수동)테스트를 하지만 storybook 을 이용하면 바로 원하는 화면으로 갈 수 있다. 이 를 위해 ui의 다양한 케이스에 대한 story(storybook의 단위)를 작성하고 UI를 작성하면 원하는 화면을 한 번에 볼 수 있을 뿐만 아니라 이 구현 과정에서 props들이 자연스럽게 분리가 되게 되는 효과를 얻을 수 있다.
storyshots
storybook은 story snapshot 기능을 제공
storyshots-puppeteer
puppeteer는 접속한 페이지를 스크린샷을 찍거나 PDF로 제공한느 tool storyshots-puppeteer 는 puppeteer의 이러한 기능을 이용하여 위의 텍스트 파일로 snapshot을 뜨는 Enzyme과 storyshots 달리 이미지 파일로 snapshot을 제공
6. 요약 및 결론
react 에서 TDD 를 효율적으로 하기 위해서는 unit 테스트를 위한 '관심사의 분리' 원칙하에서 코드를 작성하는 것이 좋고 이를 구현할 수 있는 디자인 패턴으로는 'container + presenter 패턴 그리고 redux 사용' 이 있다. container 와 redux은 적극적으로 TDD를 적용하며 작성하는 것이 좋고 UI에 해당하는 presenter 컴포넌트들은 로직이 없기 때문에 TDD보다는 화면 시나리오에 따라 컴포넌트를 개발하도록 돕는 SDD을 적용하여 개발하는 것이 더 좋다고 판단된다. SDD을 통해 작성된 story 들을 storyshot이나 storyshots-puppeteer 등을 이용하여 자동으로 테스트를 할 수 있기 때문에 시간적인 이득을 볼 수도 있다.