Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: [LINKER-73] msw Mock Server 구축 + ky 인터페이스 개선 #31

Merged
merged 8 commits into from
Jan 17, 2024

Conversation

useonglee
Copy link
Member

@useonglee useonglee commented Jan 13, 2024

작업 내용

  • msw를 활용하여 Mock Server를 구축했습니다.
  • 서버 api를 쉽게 요청할 수 있도록 ky 인터페이스를 개선했습니다.
  • 테스트 환경에서도 api를 테스트할 수 있도록 mockApi를 만들어봤습니다.

[msw]

만약 서버 개발자로부터 mock data만 전달받았을 경우에도 평소 개발하던대로 작업하실 수 있습니다.

  1. .env.local 파일에 아래와 같이 작성합니다.
NEXT_PUBLIC_MSW_MOCK=enabled
NEXT_PUBLIC_API_URL=https://api.im-linker.com
  1. dev:mock 명령어를 통해 node server를 실행시킵니다.
yarn dev:mock

스크린샷 2024-01-14 오전 4 58 02


  1. mock server에 api를 만들어줍니다. 예시 파일
// src/__server__/mocks/feed.ts
export const feedHandlers = [
  http.get(`${PREFIX_URL}/v1/my`, () => {
    return HttpResponse.json({ result: my }, { status: 200 });
  })
];

const my = {
  // .. data
}

// src/__server__/handlers.ts
export const handlers = [...feedHandlers];
  1. 컴포넌트단에서 실제 api에 요청하는 것처럼 개발할 수 있습니다.
// server component
import { ky } from '@linker/ky';

export default async function FeedPage() {
  const data = await getMy();

  return (
    <div></div>
  );
}

const getMy = () => {
  const response = ky.get<My>('/v1/my');

  return response;
};
// client component
'use client'

import { ky } from '@linker/ky';
import { use } from 'react';

export default function Feed() {
  const data = use(getMy());

  return <div></div>;
}

const getMy = () => {
  const response = ky.get<My>('/v1/my');

  return response;
};

  1. 만약 서버 api가 배포되어도 수정할 필요없이 env 파일과 실행 명령어만 바꿔주면 됩니다.
// .env.local
# NEXT_PUBLIC_MSW_MOCK=enabled

// 실행 명령어
yarn dev:mock (x)
yarn dev (o)

  1. 만약 api 테스트 코드가 필요하다면 다음과 같이 작성하실 수 있습니다.
describe('mockApi 호출 테스트', () => {
  beforeAll(() => {
    mockApi.get('/api/v1/my', my);
  });

  test('mockApi 호출 테스트', async () => {
    // .. 테스트 코드 작성
  });
});

[ky]

ky를 통해 rest api 요청을 쉽게 할 수 있습니다.

import { ky } from '@linker/ky';

const getMy = () => {
  const response = ky.get<My>('/v1/my');

  return response;
};

반영 화면


기타

  • n/a

@useonglee useonglee changed the title feat: [LINKER-73] msw Mock Server 구축 feat: [LINKER-73] msw Mock Server 구축 + ky 인터페이스 개선 Jan 14, 2024
Copy link
Collaborator

@JjungminLee JjungminLee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 스웨거가 많이 나오고 있는데 여기에 맞게 제가 구현하면 되는거죵?!

@useonglee useonglee merged commit cd7b6f6 into develop Jan 17, 2024
7 checks passed
@useonglee useonglee deleted the feat/LINKER-73 branch January 17, 2024 08:32
@useonglee useonglee restored the feat/LINKER-73 branch January 17, 2024 13:47
@useonglee useonglee deleted the feat/LINKER-73 branch January 17, 2024 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants