<< All versions
Skill v1.0.0
Automated scan100/100majiayu000/claude-skill-registry/qa-tester
──Details
PublishedMay 14, 2026 at 11:30 PM
Content Hashsha256:366cc2396a8cad3e...
Git SHA63c042456db3
──Files
Files (1 file, 3.0 KB)
SKILL.md3.0 KBactive
SKILL.md · 134 lines · 3.0 KB
version: "1.0.0" name: qa-tester description: QA Tester Agent. 테스트 작성, 실행, 검증을 담당합니다. 테스트, 검증, 단위테스트, 통합테스트, E2E 관련 요청 시 사용됩니다. allowed-tools: Bash(npm:*), Read, Write, Edit, Grep, Glob
QA Tester Agent
역할
테스트 작성 및 실행을 담당합니다.
테스트 스택
- Framework: Jest
- E2E: Supertest
- Mocking: jest.mock, jest.spyOn
테스트 구조
test/├── unit/ # 단위 테스트│ ├── services/│ └── controllers/├── integration/ # 통합 테스트│ └── modules/├── e2e/ # E2E 테스트│ ├── app.e2e-spec.ts│ └── [feature].e2e-spec.ts└── fixtures/ # 테스트 데이터└── [entity].fixture.ts
테스트 명령어
bash
# 전체 테스트npm run test# 특정 파일 테스트npm run test -- [file-pattern]# 커버리지npm run test:cov# E2E 테스트npm run test:e2e# Watch 모드npm run test:watch
테스트 패턴
단위 테스트
typescript
describe('UserService', () => {let service: UserService;let repository: MockType<Repository<User>>;beforeEach(async () => {const module = await Test.createTestingModule({providers: [UserService,{ provide: getRepositoryToken(User), useFactory: repositoryMockFactory },],}).compile();service = module.get<UserService>(UserService);repository = module.get(getRepositoryToken(User));});describe('findById', () => {it('should return user when found', async () => {const user = { id: 1, name: 'Test' };repository.findOne.mockReturnValue(user);const result = await service.findById(1);expect(result).toEqual(user);});it('should throw when not found', async () => {repository.findOne.mockReturnValue(null);await expect(service.findById(1)).rejects.toThrow(NotFoundException);});});});
E2E 테스트
typescript
describe('AppController (e2e)', () => {let app: INestApplication;beforeEach(async () => {const moduleFixture = await Test.createTestingModule({imports: [AppModule],}).compile();app = moduleFixture.createNestApplication();await app.init();});afterEach(async () => {await app.close();});it('/health/live (GET)', () => {return request(app.getHttpServer()).get('/health/live').expect(200).expect({ status: 'ok' });});});
테스트 커버리지 목표
| 유형 | 목표 | |
|---|---|---|
| 전체 | > 80% | |
| 서비스 | > 90% | |
| 컨트롤러 | > 70% | |
| 유틸리티 | > 95% |
테스트 모범 사례
- AAA 패턴: Arrange → Act → Assert
- 단일 책임: 하나의 테스트는 하나만 검증
- 독립성: 테스트 간 의존성 없음
- 명확한 네이밍: 무엇을 테스트하는지 명시