[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719TKPQ1K82KN64HJVRSCG4":3,"skill-same:01M719TKPQ1K82KN64HJVRSCG4":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":13,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M719TKPQ1K82KN64HJVRSCG4","pest-testing",null,"Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests\u002FFeature, tests\u002FUnit, tests\u002FBrowser), or needs browser testing, smoke testing multiple pages for JS errors, or architecture tests. Covers: test()\u002Fit()\u002Fexpect() syntax, datasets, mocking, browser testing (visit\u002Fclick\u002Ffill), smoke testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 4 features. Do not use for factories, seeders, migrations, controllers, models, or non-test PHP code.","cunlim\u002Fembed","cunlim","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F58944047?v=4","01M719SX0BQP2RA7SBSCGKAFVP","01M719SX10PPXCS2H85KTGTFFS",0,"MIT","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.claude\u002Fskills\u002Fpest-testing\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"testing","pest testing","change","browser","livewire","architecture","laravel","activate","code","when","workflows","files","only","how to","errors","browser testing","directories","click","projects","unit","2026-11-10 10:12:30",false,"---\nname: pest-testing\ndescription: \"Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests\u002FFeature, tests\u002FUnit, tests\u002FBrowser), or needs browser testing, smoke testing multiple pages for JS errors, or architecture tests. Covers: test()\u002Fit()\u002Fexpect() syntax, datasets, mocking, browser testing (visit\u002Fclick\u002Ffill), smoke testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 4 features. Do not use for factories, seeders, migrations, controllers, models, or non-test PHP code.\"\nlicense: MIT\nmetadata:\n  author: laravel\n---\n\n# Pest Testing 4\n\n## Documentation\n\nUse `search-docs` for detailed Pest 4 patterns and documentation.\n\n## Basic Usage\n\n### Creating Tests\n\nAll tests must be written using Pest. Use `php artisan make:test --pest {name}`.\n\nThe `{name}` argument should include only the path and test name, but should not include the test suite.\n- Incorrect: `php artisan make:test --pest Feature\u002FSomeFeatureTest` will generate `tests\u002FFeature\u002FFeature\u002FSomeFeatureTest.php`\n- Correct: `php artisan make:test --pest SomeControllerTest` will generate `tests\u002FFeature\u002FSomeControllerTest.php`\n- Incorrect: `php artisan make:test --pest --unit Unit\u002FSomeServiceTest` will generate `tests\u002FUnit\u002FUnit\u002FSomeServiceTest.php`\n- Correct: `php artisan make:test --pest --unit SomeServiceTest` will generate `tests\u002FUnit\u002FSomeServiceTest.php`\n\n### Test Organization\n\n- Unit\u002FFeature tests: `tests\u002FFeature` and `tests\u002FUnit` directories.\n- Browser tests: `tests\u002FBrowser\u002F` directory.\n- Do NOT remove tests without approval - these are core application code.\n\n### Basic Test Structure\n\nPest supports both `test()` and `it()` functions. Before writing new tests, check existing test files in the same directory to match the project's convention. Use `test()` if existing tests use `test()`, or `it()` if they use `it()`.\n\n\u003C!-- Basic Pest Test Example -->\n```php\nit('is true', function () {\n    expect(true)->toBeTrue();\n});\n```\n\n### Running Tests\n\n- Run minimal tests with filter before finalizing: `php artisan test --compact --filter=testName`.\n- Run all tests: `php artisan test --compact`.\n- Run file: `php artisan test --compact tests\u002FFeature\u002FExampleTest.php`.\n\n## Assertions\n\nUse specific assertions (`assertSuccessful()`, `assertNotFound()`) instead of `assertStatus()`:\n\n\u003C!-- Pest Response Assertion -->\n```php\nit('returns all', function () {\n    $this->postJson('\u002Fapi\u002Fdocs', [])->assertSuccessful();\n});\n```\n\n| Use | Instead of |\n|-----|------------|\n| `assertSuccessful()` | `assertStatus(200)` |\n| `assertNotFound()` | `assertStatus(404)` |\n| `assertForbidden()` | `assertStatus(403)` |\n\n## Mocking\n\nImport mock function before use: `use function Pest\\Laravel\\mock;`\n\n## Datasets\n\nUse datasets for repetitive tests (validation rules, etc.):\n\n\u003C!-- Pest Dataset Example -->\n```php\nit('has emails', function (string $email) {\n    expect($email)->not->toBeEmpty();\n})->with([\n    'james' => 'james@laravel.com',\n    'taylor' => 'taylor@laravel.com',\n]);\n```\n\n## Pest 4 Features\n\n| Feature | Purpose |\n|---------|---------|\n| Browser Testing | Full integration tests in real browsers |\n| Smoke Testing | Validate multiple pages quickly |\n| Visual Regression | Compare screenshots for visual changes |\n| Test Sharding | Parallel CI runs |\n| Architecture Testing | Enforce code conventions |\n\n### Browser Test Example\n\nBrowser tests run in real browsers for full integration testing:\n\n- Browser tests live in `tests\u002FBrowser\u002F`.\n- Use Laravel features like `Event::fake()`, `assertAuthenticated()`, and model factories.\n- Use `RefreshDatabase` for clean state per test.\n- Interact with page: click, type, scroll, select, submit, drag-and-drop, touch gestures.\n- Test on multiple browsers (Chrome, Firefox, Safari) if requested.\n- Test on different devices\u002Fviewports (iPhone 14 Pro, tablets) if requested.\n- Switch color schemes (light\u002Fdark mode) when appropriate.\n- Take screenshots or pause tests for debugging.\n\n\u003C!-- Pest Browser Test Example -->\n```php\nit('may reset the password', function () {\n    Notification::fake();\n\n    $this->actingAs(User::factory()->create());\n\n    $page = visit('\u002Fsign-in');\n\n    $page->assertSee('Sign In')\n        ->assertNoJavaScriptErrors()\n        ->click('Forgot Password?')\n        ->fill('email', 'nuno@laravel.com')\n        ->click('Send Reset Link')\n        ->assertSee('We have emailed your password reset link!');\n\n    Notification::assertSent(ResetPassword::class);\n});\n```\n\n### Smoke Testing\n\nQuickly validate multiple pages have no JavaScript errors:\n\n\u003C!-- Pest Smoke Testing Example -->\n```php\n$pages = visit(['\u002F', '\u002Fabout', '\u002Fcontact']);\n\n$pages->assertNoJavaScriptErrors()->assertNoConsoleLogs();\n```\n\n### Visual Regression Testing\n\nCapture and compare screenshots to detect visual changes.\n\n### Test Sharding\n\nSplit tests across parallel processes for faster CI runs.\n\n### Architecture Testing\n\nPest 4 includes architecture testing (from Pest 3):\n\n\u003C!-- Architecture Test Example -->\n```php\narch('controllers')\n    ->expect('App\\Http\\Controllers')\n    ->toExtendNothing()\n    ->toHaveSuffix('Controller');\n```\n\n## Common Pitfalls\n\n- Not importing `use function Pest\\Laravel\\mock;` before using mock\n- Using `assertStatus(200)` instead of `assertSuccessful()`\n- Forgetting datasets for repetitive validation tests\n- Deleting tests without approval\n- Forgetting `assertNoJavaScriptErrors()` in browser tests\n- Prefixing `Feature\u002F` or `Unit\u002F` in `{name}` when using `make:test`","# Pest Testing 4\n\n## Documentation\n\nUse `search-docs` for detailed Pest 4 patterns and documentation.\n\n## Basic Usage\n\n### Creating Tests\n\nAll tests must be written using Pest. Use `php artisan make:test --pest {name}`.\n\nThe `{name}` argument should include only the path and test name, but should not include the test suite.\n- Incorrect: `php artisan make:test --pest Feature\u002FSomeFeatureTest` will generate `tests\u002FFeature\u002FFeature\u002FSomeFeatureTest.php`\n- Correct: `php artisan make:test --pest SomeControllerTest` will generate `tests\u002FFeature\u002FSomeControllerTest.php`\n- Incorrect: `php artisan make:test --pest --unit Unit\u002FSomeServiceTest` will generate `tests\u002FUnit\u002FUnit\u002FSomeServiceTest.php`\n- Correct: `php artisan make:test --pest --unit SomeServiceTest` will generate `tests\u002FUnit\u002FSomeServiceTest.php`\n\n### Test Organization\n\n- Unit\u002FFeature tests: `tests\u002FFeature` and `tests\u002FUnit` directories.\n- Browser tests: `tests\u002FBrowser\u002F` directory.\n- Do NOT remove tests without approval - these are core application code.\n\n### Basic Test Structure\n\nPest supports both `test()` and `it()` functions. Before writing new tests, check existing test files in the same directory to match the project's convention. Use `test()` if existing tests use `test()`, or `it()` if they use `it()`.\n\n\u003C!-- Basic Pest Test Example -->\n```php\nit('is true', function () {\n    expect(true)->toBeTrue();\n});\n```\n\n### Running Tests\n\n- Run minimal tests with filter before finalizing: `php artisan test --compact --filter=testName`.\n- Run all tests: `php artisan test --compact`.\n- Run file: `php artisan test --compact tests\u002FFeature\u002FExampleTest.php`.\n\n## Assertions\n\nUse specific assertions (`assertSuccessful()`, `assertNotFound()`) instead of `assertStatus()`:\n\n\u003C!-- Pest Response Assertion -->\n```php\nit('returns all', function () {\n    $this->postJson('\u002Fapi\u002Fdocs', [])->assertSuccessful();\n});\n```\n\n| Use | Instead of |\n|-----|------------|\n| `assertSuccessful()` | `assertStatus(200)` |\n| `assertNotFound()` | `assertStatus(404)` |\n| `assertForbidden()` | `assertStatus(403)` |\n\n## Mocking\n\nImport mock function before use: `use function Pest\\Laravel\\mock;`\n\n## Datasets\n\nUse datasets for repetitive tests (validation rules, etc.):\n\n\u003C!-- Pest Dataset Example -->\n```php\nit('has emails', function (string $email) {\n    expect($email)->not->toBeEmpty();\n})->with([\n    'james' => 'james@laravel.com',\n    'taylor' => 'taylor@laravel.com',\n]);\n```\n\n## Pest 4 Features\n\n| Feature | Purpose |\n|---------|---------|\n| Browser Testing | Full integration tests in real browsers |\n| Smoke Testing | Validate multiple pages quickly |\n| Visual Regression | Compare screenshots for visual changes |\n| Test Sharding | Parallel CI runs |\n| Architecture Testing | Enforce code conventions |\n\n### Browser Test Example\n\nBrowser tests run in real browsers for full integration testing:\n\n- Browser tests live in `tests\u002FBrowser\u002F`.\n- Use Laravel features like `Event::fake()`, `assertAuthenticated()`, and model factories.\n- Use `RefreshDatabase` for clean state per test.\n- Interact with page: click, type, scroll, select, submit, drag-and-drop, touch gestures.\n- Test on multiple browsers (Chrome, Firefox, Safari) if requested.\n- Test on different devices\u002Fviewports (iPhone 14 Pro, tablets) if requested.\n- Switch color schemes (light\u002Fdark mode) when appropriate.\n- Take screenshots or pause tests for debugging.\n\n\u003C!-- Pest Browser Test Example -->\n```php\nit('may reset the password', function () {\n    Notification::fake();\n\n    $this->actingAs(User::factory()->create());\n\n    $page = visit('\u002Fsign-in');\n\n    $page->assertSee('Sign In')\n        ->assertNoJavaScriptErrors()\n        ->click('Forgot Password?')\n        ->fill('email', 'nuno@laravel.com')\n        ->click('Send Reset Link')\n        ->assertSee('We have emailed your password reset link!');\n\n    Notification::assertSent(ResetPassword::class);\n});\n```\n\n### Smoke Testing\n\nQuickly validate multiple pages have no JavaScript errors:\n\n\u003C!-- Pest Smoke Testing Example -->\n```php\n$pages = visit(['\u002F', '\u002Fabout', '\u002Fcontact']);\n\n$pages->assertNoJavaScriptErrors()->assertNoConsoleLogs();\n```\n\n### Visual Regression Testing\n\nCapture and compare screenshots to detect visual changes.\n\n### Test Sharding\n\nSplit tests across parallel processes for faster CI runs.\n\n### Architecture Testing\n\nPest 4 includes architecture testing (from Pest 3):\n\n\u003C!-- Architecture Test Example -->\n```php\narch('controllers')\n    ->expect('App\\Http\\Controllers')\n    ->toExtendNothing()\n    ->toHaveSuffix('Controller');\n```\n\n## Common Pitfalls\n\n- Not importing `use function Pest\\Laravel\\mock;` before using mock\n- Using `assertStatus(200)` instead of `assertSuccessful()`\n- Forgetting datasets for repetitive validation tests\n- Deleting tests without approval\n- Forgetting `assertNoJavaScriptErrors()` in browser tests\n- Prefixing `Feature\u002F` or `Unit\u002F` in `{name}` when using `make:test`",{"name":5,"license":14,"metadata":48,"description":7},{"author":29},"main","e9c25e4863c62fe5db448cb999264370704926af","laravel\u002F.claude\u002Fskills\u002Fpest-testing","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed","https:\u002F\u002Fgithub.com\u002Fcunlim","2026-07-24 18:59:29",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add cunlim\u002Fembed --skill pest-testing",{"tool":61,"command":62},"bunx","bunx skills add cunlim\u002Fembed --skill pest-testing",{"tool":64,"command":65},"pnpm","pnpm dlx skills add cunlim\u002Fembed --skill pest-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.claude\u002Fskills\u002Fpest-testing\u002FSKILL.md",true,[],[70,101,123,148,155,161],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":82,"publishedAt":43},"01M719TT1P662RG2JNMBC437BM","tailwindcss-development","Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex\u002Fgrid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3\u002Fv4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML\u002FCSS component, CSS file audits, build tool configuration, and vanilla CSS.","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.claude\u002Fskills\u002Ftailwindcss-development\u002FSKILL.md",[76,79],{"categoryNo":77,"categoryName":78,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":80,"categoryName":81,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",[83,84,85,86,87,88,89,90,91,92,93,94,95,32,96,29,97,98,99,100],"tailwindcss","tailwindcss development","development","css","Tailwind","card","mode","variants","database queries","writing","utility","invoke","database","components","api","work","component","message",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":108,"publishedAt":43},"01M719TQ6WG02TC2VD7MHXR4CK","socialite-development","Manages OAuth social authentication with Laravel Socialite. Activate when adding social login providers; configuring OAuth redirect\u002Fcallback flows; retrieving authenticated user details; customizing scopes or parameters; setting up community providers; testing with Socialite fakes; or when the user mentions social login, OAuth, Socialite, or third-party authentication.","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.claude\u002Fskills\u002Fsocialite-development\u002FSKILL.md",[107],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[85,109,110,111,112,23,113,114,115,32,30,29,116,117,118,119,120,121,122],"socialite development","community","authentication","flows","social","up","OAuth","with","callback","login","party","third-party","Providers","user",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":130,"publishedAt":43},"01M719TF7KBQ2T3JM71TWYER8C","laravel-best-practices","Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.claude\u002Fskills\u002Flaravel-best-practices\u002FSKILL.md",[129],{"categoryNo":80,"categoryName":81,"taxonomyType":20,"taxonomyTypeDesc":21},[29,131,132,133,134,135,136,92,137,138,139,140,31,141,142,143,144,145,146,147],"best practices","laravel best practices","error","reviews","performance","issues","scheduled","caching","query","code patterns","route","strategies","refactoring","commands","security","security patterns","eloquent",{"skillNo":149,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":154,"publishedAt":43},"01M719TBY6327Z3MC239P9XC08","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.agents\u002Fskills\u002Ftailwindcss-development\u002FSKILL.md",[152,153],{"categoryNo":77,"categoryName":78,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":80,"categoryName":81,"taxonomyType":20,"taxonomyTypeDesc":21},[83,84,85,86,87,88,89,90,91,92,93,94,95,32,96,29,97,98,99,100],{"skillNo":156,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":43},"01M719T9PEXG8SNP0N4DEHGF8Q","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.agents\u002Fskills\u002Fsocialite-development\u002FSKILL.md",[159],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[85,109,110,111,112,23,113,114,115,32,30,29,116,117,118,119,120,121,122],{"skillNo":162,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":166,"publishedAt":43},"01M719T6BQXBVGYRB3HJAYAVJA","https:\u002F\u002Fgithub.com\u002Fcunlim\u002Fembed\u002Fblob\u002Fmain\u002Flaravel\u002F.agents\u002Fskills\u002Fpest-testing\u002FSKILL.md",[165],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[24,23,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25]]