Skip to content

μœ λ‹› ν…ŒμŠ€νŠΈ μΆ”κ°€Β #2

@DaleSeo

Description

@DaleSeo

ν˜„μž¬ 상황

ν”„λ‘œμ νŠΈμ— μœ λ‹› ν…ŒμŠ€νŠΈκ°€ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€.

  • ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬ λ―Έμ„€μ •
  • 핡심 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ“€μ˜ λ™μž‘ 검증 λΆˆκ°€

λͺ©ν‘œ

utils/ ν΄λ”μ˜ 핡심 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜μ— λŒ€ν•œ μœ λ‹› ν…ŒμŠ€νŠΈ μΆ”κ°€

ν…ŒμŠ€νŠΈ νŒŒμΌμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ μ˜†μ— 배치 (예: github.js β†’ github.test.js)

ν…ŒμŠ€νŠΈ λŒ€μƒ

utils/github.js

  • createJWT() - JWT 생성 및 μ„œλͺ…
  • importPrivateKey() - PKCS8 Private Key νŒŒμ‹±
  • sign() - RS256 μ„œλͺ… 생성
  • base64UrlEncode() - Base64 URL 인코딩

utils/cors.js

  • corsResponse() - CORS 헀더 포함 응닡
  • errorResponse() - μ—λŸ¬ 응닡 포맷

파일 ꡬ쑰

utils/
β”œβ”€β”€ github.js
β”œβ”€β”€ github.test.js          # μƒˆλ‘œ μΆ”κ°€
β”œβ”€β”€ cors.js
β”œβ”€β”€ cors.test.js            # μƒˆλ‘œ μΆ”κ°€
β”œβ”€β”€ webhook.js
└── ... (기타 νŒŒμΌλ“€)

κ΅¬ν˜„ κ°€μ΄λ“œ

1. ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜

npm install -D vitest

2. μ„€μ • 파일 생성

vitest.config.js:

import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    globals: true,
  },
});

3. package.json에 슀크립트 μΆ”κ°€

{
  "scripts": {
    "test": "vitest run",
    "test:watch": "vitest"
  }
}

4. ν…ŒμŠ€νŠΈ 파일 μž‘μ„± μ˜ˆμ‹œ

utils/github.test.js:

import { describe, it, expect } from 'vitest';
import { base64UrlEncode } from './github.js';

describe('base64UrlEncode', () => {
  it('should encode Uint8Array to base64url', () => {
    const input = new Uint8Array([72, 101, 108, 108, 111]);
    const result = base64UrlEncode(input);
    
    expect(result).toBe('SGVsbG8');
  });
});

utils/cors.test.js:

import { describe, it, expect } from 'vitest';
import { corsResponse, errorResponse } from './cors.js';

describe('corsResponse', () => {
  it('should include CORS headers', () => {
    const response = corsResponse({ success: true });
    
    expect(response.headers.get('Access-Control-Allow-Origin')).toBe('*');
  });
});

describe('errorResponse', () => {
  it('should return error with status code', () => {
    const response = errorResponse('Not found', 404);
    
    expect(response.status).toBe(404);
  });
});

체크리슀트

  • Vitest μ„€μΉ˜
  • vitest.config.js 생성
  • package.json에 test 슀크립트 μΆ”κ°€
  • utils/github.test.js μž‘μ„±
  • utils/cors.test.js μž‘μ„±
  • npm test둜 λͺ¨λ“  ν…ŒμŠ€νŠΈ 톡과 확인

μ°Έκ³ 

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions