Skip to main content 홈 크리에이터 ranbot-ai awesome-skills testing-patterns
testing-patterns Jest testing patterns, factory functions, mocking strategies, and TDD workflow. Use when writing unit tests, creating test factories, or following TDD red-green-refactor cycle.
설치로 이동 Skills Marketplace 커뮤니티가 만든 AI 스킬을 발견하고 탐색하세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/ranbot-ai/awesome-skills --skill testing-patterns명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Zip 다운로드 다운로드 중... name testing-patterns description Jest testing patterns, factory functions, mocking strategies, and TDD workflow. Use when writing unit tests, creating test factories, or following TDD red-green-refactor cycle. category Development & Code Tools source antigravity tags ["typescript","react","api","ai","llm","workflow","rag"] url https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/testing-patterns
Testing Patterns and Utilities
Testing Philosophy
Test-Driven Development (TDD):
Write failing test FIRST
Implement minimal code to pass
Refactor after green
Never write production code without a failing test
Behavior-Driven Testing:
Test behavior, not implementation
Focus on public APIs and business requirements
Avoid testing implementation details
Use descriptive test names that describe behavior
Create getMockX(overrides?: Partial<X>) functions
Provide sensible defaults
Allow overriding specific properties
Keep tests DRY and maintainable
Test Utilities
Custom Render Function Create a custom render that wraps components with required providers:
import { render } from '@testing-library/react-native' ;
import { ThemeProvider } from './theme' ;
export const renderWithTheme = (ui : React .ReactElement ) => {
return render (
<ThemeProvider > {ui}</ThemeProvider >
);
};
import { renderWithTheme } from 'utils/testUtils' ;
import { screen } from '@testing-library/react-native' ;
it ('should render component' , () => {
renderWithTheme (<MyComponent /> );
expect (screen.getByText ('Hello' )).toBeTruthy ();
});
Factory Pattern
Component Props Factory import { ComponentProps } from 'react' ;
const getMockMyComponentProps = (
overrides ?: Partial <ComponentProps <typeof MyComponent >>
) => {
return {
title : 'Default Title' ,
count : 0 ,
onPress : jest.fn (),
isLoading : false ,
...overrides,
};
};
it ('should render with custom title' , () => {
const props = getMockMyComponentProps ({ title : 'Custom Title' });
renderWithTheme (<MyComponent {...props } /> );
expect (screen.getByText ('Custom Title' )).toBeTruthy ();
});
Data Factory interface User {
id : string ;
name : string ;
email : string ;
role : 'admin' | 'user' ;
}
const getMockUser = (overrides ?: Partial <User >): User => {
return {
id : '123' ,
name : 'John Doe' ,
email : 'john@example.com' ,
role : 'user' ,
...overrides,
};
};
it ('should display admin badge for admin users' , () => {
const user = getMockUser ({ role : 'admin' });
renderWithTheme (<UserCard user ={user} /> );
expect (screen.getByText ('Admin' )).toBeTruthy ();
});
Mocking Patterns
Mocking Modules
jest.mock ('utils/analytics' );
jest.mock ('utils/analytics' , () => ({
Analytics : {
logEvent : jest.fn (),
},
}));
const mockLogEvent = jest.requireMock ('utils/analytics' ).Analytics .logEvent ;
Mocking GraphQL Hooks jest.mock ('./GetItems.generated' , () => ({
useGetItemsQuery : jest.fn (),
}));
const mockUseGetItemsQuery = jest.requireMock (
'./GetItems.generated'
).useGetItemsQuery as jest.Mock ;
mockUseGetItemsQuery.mockReturnValue ({
data : { items : [] },
loading : false ,
error : undefined ,
});
Test Structure describe ('ComponentName' , () => {
beforeEach (() => {
jest.clearAllMocks ();
});
describe ('Rendering' , () => {
it ('should render component with default props' , () => {});
it ('should render loading state when loading' , () => {});
});
describe ('User interactions' , () => {
it ('should call onPress when button is clicked' , async () => {});
});
describe ('Edge cases' , () => {
it ('should handle empty data gracefully' , () => {});
});
});
Query Patterns
expect (screen.getByText ('Hello' )).toBeTruthy ();
expect (screen.queryByText ('Goodbye' )).toBeNull ();
await waitFor (() => {
expect (screen.findByText ('Loaded' )).toBeTruthy ();
});
User Interaction Patterns import { fireEvent, screen } from '@testing-library/react-native' ;
it ('should submit form on button click' , async () => {
const onSubmit = jest.fn ();
renderWithTheme (<LoginForm onSubmit ={onSubmit} /> );
fireEvent.changeText (screen.getByLabelText ('Email' ), 'user@example.com' );
fireEvent.changeText (screen.getByLabelText ('Password' ), 'password123' );
fireEvent.press (screen.getByTestId ('login-button' ));
await waitFor (() => {
expect (onSubmit).toHaveBeenCalled ();
});
});
Anti-Patterns to Avoid
Testing Mock Behavior Instead of Real Behavior
expect (mockFetchData).toHaveBeenCalled ();
expect (screen.getByText ('John Doe' )).toBeTruthy ();
Not Using Factories
it ('test 1' , () => {
const user = { id : '1' , name : 'John' , email : 'john@test.com' , role : 'user' };
});
it ('test 2' , () => {
const user = { id : '2' , name : 'Jane' , email : 'jane@test.com' };
});
const user = getMockUser ({ name :