[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ET5KKY7BHMZ6PDQCS2KCD1":3,"skill-same:01M6ET5KKY7BHMZ6PDQCS2KCD1":85},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6ET5KKY7BHMZ6PDQCS2KCD1","testing-strategy",null,"Comprehensive testing workflow combining TDD, real implementations (no mocking), and E2E testing. Use when implementing features, writing tests, or setting up test infrastructure.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdoyajin174\u002Ftesting-strategy\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"testing strategy","strategy","testing","write","mocking","testing workflow","tests","superpowers","up","use","edit","read","Bash","e2e","writing tests","test","e2e testing","workflow","tdd","writing","2026-11-10 10:12:30",false,"---\nname: testing-strategy\ndescription: Comprehensive testing workflow combining TDD, real implementations (no mocking), and E2E testing. Use when implementing features, writing tests, or setting up test infrastructure.\nallowed-tools: Read, Glob, Grep, Edit, Write, Bash\nlicense: MIT\nmetadata:\n  author: obra\u002Fsuperpowers\n  version: \"2.0\"\n---\n\n# Testing Strategy\n\nTDD와 실제 구현 기반 테스트를 결합한 통합 테스트 스킬입니다.\n\n## Iron Law\n\n> **\"NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST\"**\n\n## RED-GREEN-REFACTOR Cycle\n\n### 1. RED - 실패하는 테스트 작성\n```\n- 원하는 동작을 보여주는 최소한의 테스트 작성\n- 테스트가 실패하는지 반드시 확인\n```\n\n### 2. GREEN - 테스트 통과시키기\n```\n- 테스트를 통과시키는 가장 단순한 코드 작성\n- 완벽한 코드 X, 동작하는 코드 O\n```\n\n### 3. REFACTOR - 리팩토링\n```\n- 코드 정리 (중복 제거, 명명 개선)\n- 테스트가 계속 통과하는지 확인\n```\n\n---\n\n## No Mocking Policy\n\n> **실제 구현을 테스트하라**\n\n### ❌ 금지\n```typescript\njest.mock('.\u002Fdatabase');\njest.mock('.\u002Fapi');\n```\n\n### ✅ 허용\n```typescript\n\u002F\u002F 실제 테스트 DB 또는 인메모리 DB 사용\nconst db = await createTestDatabase();\n\n\u002F\u002F MSW로 실제 HTTP 계층 테스트\nconst server = setupServer(\n  rest.get('\u002Fapi\u002Fusers', (req, res, ctx) => {\n    return res(ctx.json([{ id: 1, name: 'Test' }]));\n  })\n);\n```\n\n---\n\n## E2E Testing (Playwright)\n\n```typescript\ntest('user can complete checkout', async ({ page }) => {\n  await page.goto('\u002Fproducts');\n  await page.click('[data-testid=\"add-to-cart\"]');\n  await page.click('[data-testid=\"checkout\"]');\n  await expect(page.locator('.confirmation')).toBeVisible();\n});\n```\n\n---\n\n## Test Categories\n\n| 유형 | 범위 | 도구 |\n|------|------|------|\n| Unit | 함수\u002F클래스 | Vitest, Jest |\n| Integration | 모듈 간 연동 | 실제 DB, MSW |\n| E2E | 전체 사용자 흐름 | Playwright |\n\n## Checklist\n\n- [ ] 모든 함수가 테스트됨\n- [ ] 테스트가 먼저 실패하는 것을 확인\n- [ ] Mock 사용 없음 (MSW 허용)\n- [ ] E2E로 핵심 흐름 검증\n","# Testing Strategy\n\nTDD와 실제 구현 기반 테스트를 결합한 통합 테스트 스킬입니다.\n\n## Iron Law\n\n> **\"NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST\"**\n\n## RED-GREEN-REFACTOR Cycle\n\n### 1. RED - 실패하는 테스트 작성\n```\n- 원하는 동작을 보여주는 최소한의 테스트 작성\n- 테스트가 실패하는지 반드시 확인\n```\n\n### 2. GREEN - 테스트 통과시키기\n```\n- 테스트를 통과시키는 가장 단순한 코드 작성\n- 완벽한 코드 X, 동작하는 코드 O\n```\n\n### 3. REFACTOR - 리팩토링\n```\n- 코드 정리 (중복 제거, 명명 개선)\n- 테스트가 계속 통과하는지 확인\n```\n\n---\n\n## No Mocking Policy\n\n> **실제 구현을 테스트하라**\n\n### ❌ 금지\n```typescript\njest.mock('.\u002Fdatabase');\njest.mock('.\u002Fapi');\n```\n\n### ✅ 허용\n```typescript\n\u002F\u002F 실제 테스트 DB 또는 인메모리 DB 사용\nconst db = await createTestDatabase();\n\n\u002F\u002F MSW로 실제 HTTP 계층 테스트\nconst server = setupServer(\n  rest.get('\u002Fapi\u002Fusers', (req, res, ctx) => {\n    return res(ctx.json([{ id: 1, name: 'Test' }]));\n  })\n);\n```\n\n---\n\n## E2E Testing (Playwright)\n\n```typescript\ntest('user can complete checkout', async ({ page }) => {\n  await page.goto('\u002Fproducts');\n  await page.click('[data-testid=\"add-to-cart\"]');\n  await page.click('[data-testid=\"checkout\"]');\n  await expect(page.locator('.confirmation')).toBeVisible();\n});\n```\n\n---\n\n## Test Categories\n\n| 유형 | 범위 | 도구 |\n|------|------|------|\n| Unit | 함수\u002F클래스 | Vitest, Jest |\n| Integration | 모듈 간 연동 | 실제 DB, MSW |\n| E2E | 전체 사용자 흐름 | Playwright |\n\n## Checklist\n\n- [ ] 모든 함수가 테스트됨\n- [ ] 테스트가 먼저 실패하는 것을 확인\n- [ ] Mock 사용 없음 (MSW 허용)\n- [ ] E2E로 핵심 흐름 검증\n",{"name":5,"license":15,"metadata":52,"description":7,"allowed-tools":55},{"author":53,"version":54},"obra\u002Fsuperpowers","2.0","Read, Glob, Grep, Edit, Write, Bash","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fdoyajin174\u002Ftesting-strategy",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill testing-strategy",{"tool":71,"command":72},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill testing-strategy",{"tool":74,"command":75},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill testing-strategy","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdoyajin174\u002Ftesting-strategy\u002FSKILL.md",true,[79],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"skill-report.json","REFERENCE","参考文档",10075,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdoyajin174\u002Ftesting-strategy\u002Fskill-report.json",[86,96,106,115,121,128],{"skillNo":87,"name":88,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":92,"publishedAt":47},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[91],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[93,94,95],"model","model hierarchy","model hierarchy skill",{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":47},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[101],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[103,104,105],"MCP","zoom","zoom mcp",{"skillNo":107,"name":108,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":47},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[112,113,114,104],"sdk","zoom apps sdk","apps",{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":47},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[117],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":47},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[126],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[123],{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":47},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[130]]