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

[Common] Add jest for test #210

Merged
merged 11 commits into from
Aug 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
rootDir: './',
transform: {
'^.+\\.ts?$': 'ts-jest',
},
coverageDirectory: '<rootDir>/coverage',
testPathIgnorePatterns: ['<rootDir>/node_modules'],
moduleFileExtensions: ['ts', 'js'],
projects: [
{
displayName: 'Common',
testEnvironment: 'node',
transform: {
'^.+\\.ts?$': 'ts-jest',
},
testMatch: ['<rootDir>/packages/common/src/**/*.test.ts'],
testPathIgnorePatterns: ['<rootDir>/packages/node_modules'],
},
],
};
9 changes: 7 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"ui": "pnpm --filter ui",
"tsconfig": "pnpm --filter tsconfig",
"eslint-config-custom": "pnpm --filter eslint-config-custom",
"types": "pnpm --filter types"
"types": "pnpm --filter types",
"test": "jest --coverage"
},
"private": true,
"license": "MIT",
Expand All @@ -24,6 +25,10 @@
"react": "^18.2.0"
},
"devDependencies": {
"@types/gtag.js": "^0.0.12"
"@types/gtag.js": "^0.0.12",
"@types/jest": "^29.5.4",
"jest": "^29.6.3",
"ts-jest": "^29.1.1",
"ts-node": "^10.9.1"
}
}
41 changes: 41 additions & 0 deletions packages/common/src/utils/__test__/descriptionFormatting.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import descriptionFormatting from '../descriptionFormatting';

const generateRandomString = (length: number) => {
const characters =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

let result = '';

for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
result += characters.charAt(randomIndex);
}

return result;
};

describe('generateRandomString', () => {
test('길이가 30인 랜덤한 문자열이 반환된다.', () => {
const LENGTH = 30;

const randomString = generateRandomString(LENGTH);

expect(randomString.length).toBe(LENGTH);
});
});

describe('descriptionFormatting', () => {
test('길이가 120 이상인 문자열의 경우, 120자 이하의 문자열이 반환된다.', () => {
const randomString = generateRandomString(1000);
const formattedString = descriptionFormatting(randomString);

expect(formattedString.length).toBeLessThanOrEqual(120);
});

test('길이가 120 이하인 문자열의 경우, 원래 문자열이 반환된다.', () => {
const randomString = generateRandomString(100);
const formattedString = descriptionFormatting(randomString);

expect(formattedString).toBe(randomString);
});
});
85 changes: 85 additions & 0 deletions packages/common/src/utils/__test__/filterImages.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { FileInfoType } from 'types';
import filterImages from '../filterImages';

describe('filterImages', () => {
test('JPG, PNG, HEIC, JPEG, WEBP 확장자의 경우 그대로 반환됩니다.', () => {
const exampleFiles: FileInfoType[] = [
{
fileUrl: 'https://example.com/1.jpg',
fileName: '1',
fileExtension: 'JPG',
},
{
fileUrl: 'https://example.com/2.png',
fileName: '2',
fileExtension: 'PNG',
},
{
fileUrl: 'https://example.com/3.heic',
fileName: '3',
fileExtension: 'HEIC',
},
];

const resultFiles: FileInfoType[] = [
{
fileUrl: 'https://example.com/1.jpg',
fileName: '1',
fileExtension: 'JPG',
},
{
fileUrl: 'https://example.com/2.png',
fileName: '2',
fileExtension: 'PNG',
},
{
fileUrl: 'https://example.com/3.heic',
fileName: '3',
fileExtension: 'HEIC',
},
];

expect(filterImages(exampleFiles)).toEqual(resultFiles);
});

test('JPG, PNG, HEIC, JPEG, WEBP 이외의 확장자의 경우 제외하고 반환됩니다.', () => {
const exampleFiles: FileInfoType[] = [
{
fileUrl: 'https://example.com/1.jpg',
fileName: '1',
fileExtension: 'JPG',
},
{
fileUrl: 'https://example.com/2.png',
fileName: '2',
fileExtension: 'PNG',
},
{
fileUrl: 'https://example.com/3.mp4',
fileName: '3',
fileExtension: 'MP4',
},
];

const resultFiles: FileInfoType[] = [
{
fileUrl: 'https://example.com/1.jpg',
fileName: '1',
fileExtension: 'JPG',
},
{
fileUrl: 'https://example.com/2.png',
fileName: '2',
fileExtension: 'PNG',
},
];

expect(filterImages(exampleFiles)).toEqual(resultFiles);
});

test('undefined인 경우 빈 배열이 반환됩니다.', () => {
const resultFiles: FileInfoType[] = [];

expect(filterImages()).toEqual(resultFiles);
});
});
11 changes: 11 additions & 0 deletions packages/common/src/utils/__test__/formatDate.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import formatDate from '../formatDate';

describe('formatDate', () => {
test('1일은 01이다.', () => {
expect(formatDate(1)).toBe('01');
});

test('10일은 10이다.', () => {
expect(formatDate(10)).toBe('10');
});
});
11 changes: 11 additions & 0 deletions packages/common/src/utils/__test__/minutesToMs.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import minutesToMs from '../minutesToMs';

describe('minutesToMs', () => {
test('5분은 300000ms이다.', () => {
expect(minutesToMs(5)).toBe(300000);
});

test('10분은 600000ms이다.', () => {
expect(minutesToMs(10)).toBe(600000);
});
});
11 changes: 11 additions & 0 deletions packages/common/src/utils/__test__/minutesToSeconds.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import minutesToSeconds from '../minutesToSeconds';

describe('minutesToSeconds', () => {
test('1분은 60초이다.', () => {
expect(minutesToSeconds(1)).toBe(60);
});

test('5분은 300초이다.', () => {
expect(minutesToSeconds(5)).toBe(300);
});
});
7 changes: 7 additions & 0 deletions packages/common/src/utils/__test__/pxToRem.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import pxToRem from '../pxToRem';

describe('pxToREM', () => {
test('80px은 5rem이다', () => {
expect(pxToRem(80)).toBe(5);
});
});
11 changes: 11 additions & 0 deletions packages/common/src/utils/__test__/secondsToMs.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import secondsToMs from '../secondsToMs';

describe('secondsToMs', () => {
test('1초는 1000ms이다', () => {
expect(secondsToMs(1)).toBe(1000);
});

test('60초(1분)은 60000ms이다', () => {
expect(secondsToMs(60)).toBe(60000);
});
});
Loading