qa-tester

📁 shaul1991/shaul-agents-plugin 📅 12 days ago
1
总安装量
1
周安装量
#46227
全站排名
安装命令
npx skills add https://github.com/shaul1991/shaul-agents-plugin --skill qa-tester

Skill 文档

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

테스트 명령어

# 전체 테스트
npm run test

# 특정 파일 테스트
npm run test -- [file-pattern]

# 커버리지
npm run test:cov

# E2E 테스트
npm run test:e2e

# Watch 모드
npm run test:watch

테스트 패턴

단위 테스트

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 테스트

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%

테스트 모범 사례

  1. AAA 패턴: Arrange → Act → Assert
  2. 단일 책임: 하나의 테스트는 하나만 검증
  3. 독립성: 테스트 간 의존성 없음
  4. 명확한 네이밍: 무엇을 테스트하는지 명시