[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1Z5ENHVRKH2CT5APAT0Q7":3,"skill-same:01M6F1Z5ENHVRKH2CT5APAT0Q7":63},{"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":23,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6F1Z5ENHVRKH2CT5APAT0Q7","testing.write_unit_tests",null,"Propose a plan for unit testing a file and then implement it","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6F1K6CCKKF8YKTBN4ZV509G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftesting.write_unit_tests\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"testing","unit tests","testing write unit tests","write","tests","unit","implement","file","plan","haiku","unit testing","it","2026-11-10 10:12:30",false,"---\ndescription: Propose a plan for unit testing a file and then implement it\nmodel: haiku\n---\n\n# Goal\n- Propose a unit test plan for a given file, then implement it after the user\n  approves\n\n# Workflow\n\n## Propose a Unit Test Plan\n- Given a file `\u003CFILE>`, create a comprehensive unit test plan according to\n  the rules in `.claude\u002Fskills\u002Ftesting.rules.md`\n- Create a file with a summary of what is going to be tested\n\n## Implement the Unit Test Plan\n- Wait for the user to review the plan and approve or modify it\n- Then implement it\n\n# Important\n- All invariants and conventions for unit tests are documented in\n  `.claude\u002Fskills\u002Ftesting.rules.md`\n- For all code you must follow the instructions in\n  `.claude\u002Fskills\u002Fcoding.rules.md`\n\n# Verification\n- [ ] Make sure everything in `# Verification` in\n  `.claude\u002Fskills\u002Ftesting.rules.md` is verified\n","# Goal\n- Propose a unit test plan for a given file, then implement it after the user\n  approves\n\n# Workflow\n\n## Propose a Unit Test Plan\n- Given a file `\u003CFILE>`, create a comprehensive unit test plan according to\n  the rules in `.claude\u002Fskills\u002Ftesting.rules.md`\n- Create a file with a summary of what is going to be tested\n\n## Implement the Unit Test Plan\n- Wait for the user to review the plan and approve or modify it\n- Then implement it\n\n# Important\n- All invariants and conventions for unit tests are documented in\n  `.claude\u002Fskills\u002Ftesting.rules.md`\n- For all code you must follow the instructions in\n  `.claude\u002Fskills\u002Fcoding.rules.md`\n\n# Verification\n- [ ] Make sure everything in `# Verification` in\n  `.claude\u002Fskills\u002Ftesting.rules.md` is verified\n",{"model":33,"description":7},"master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Ftesting.write_unit_tests",1,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify-ai.github.io\u002Fhelpers\u002F","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 21:54:29",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add causify-ai\u002Fhelpers --skill testing.write_unit_tests",{"tool":55,"command":56},"bunx","bunx skills add causify-ai\u002Fhelpers --skill testing.write_unit_tests",{"tool":58,"command":59},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill testing.write_unit_tests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftesting.write_unit_tests\u002FSKILL.md",true,[],[64,83,100,112,121,135],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":73,"publishedAt":36},"01M6F209RASRBEK7GBNG5M00K0","tutorial_in_60_mins.propagate_docker_changes","Sync tutorial and class-project Docker files to match project_template","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",[70],{"categoryNo":71,"categoryName":72,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[74,75,76,77,78,79,33,80,81,82],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","template","sync","files","project","match",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":36},"01M6F207XZ5YDAJ0KNDRE6EN0R","tutorial_in_60_mins.merge_markdown","Merge the content of a markdown file into a Jupyter notebook","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.merge_markdown\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[93,94,75,95,96,97,33,31,98,99],"markdown","merge","tutorial in 60 mins merge markdown","notebook","jupyter","jupyter notebook","content",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":36},"01M6F2059X95Q1A13HD67E9JRF","tutorial_in_60_mins.format","Format a directory to follow the \"Learn X in 60 Minutes\" tutorial conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.format\u002FSKILL.md",[],[107,75,108,109,110,33,111],"tutorial in 60 mins format","format","directory","learn","conventions",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":36},"01M6F202MDHMNYD5S1YHG2PKZD","tutorial_in_60_mins.create","Create a tutorial directory for the Learn X in 60 Minutes conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.create\u002FSKILL.md",[],[119,75,120,110,109,111],"tutorial in 60 mins create","create",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":36},"01M6F2004BW13GQ59N3RGSAYVN","todo.reorg_in_progress","Reorganize ai_task_queue.md so in-progress tasks, not-started tasks, and mislabeled topic headers sit under the right H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_in_progress\u002FSKILL.md",[],[128,129,130,131,132,133,134],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":36},"01M6F1ZXN0G6HBD08GT8HE5FYA","todo.reorg_headers","Reorganize ai_task_queue.md .md so every H2 topic matches ALL TOPICS and every H3 task sits under the right topic, keeping its H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_headers\u002FSKILL.md",[],[142,129,132,133,134],"todo reorg headers"]