PHPackages                             dejwcake/testing-kit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. dejwcake/testing-kit

ActiveLibrary[Testing &amp; Quality](/categories/testing)

dejwcake/testing-kit
====================

Testing utilities and base test cases for Craftable/Laravel projects

1.0.2(3w ago)019↓50%MITPHPPHP ^8.5CI passing

Since May 8Pushed 6d agoCompare

[ Source](https://github.com/dejwCake/testing-kit)[ Packagist](https://packagist.org/packages/dejwcake/testing-kit)[ RSS](/packages/dejwcake-testing-kit/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (4)Dependencies (11)Versions (5)Used By (0)

Testing Kit
===========

[](#testing-kit)

Testing Kit is a Laravel package that provides reusable testing infrastructure for Craftable-based projects. It supplies:

- A `TestCase` base (database refresh, translator mocking, dummy CSRF, snapshot helpers, download assertions, declarative actor resolution from PHP attributes)
- `HttpTestCase`, `WebTestCase`, `ApiTestCase` for HTTP / web / API integration tests
- `Context` PHP attribute for declarative `customer | admin-user | anonymous` setup per test method or class
- `UserFactory` and `AdminUserFactory` with the underlying model class pluggable via config (constructor-injected `Hasher`); `AdminUserFactory` also assigns the configured admin role
- HTML snapshot driver and `SnapshotAsserts` trait for view snapshot testing
- `OpenApiValidationTrait` and helper `Util` for asserting responses against an OpenAPI spec

This package is part of [Craftable](https://github.com/dejwCake/craftable) (`dejwCake/craftable`), an administration starter kit for Laravel.

Install
-------

[](#install)

Add the path repository (or a Packagist version) and require as a dev dependency in your application:

```
"require-dev": {
    "dejwcake/testing-kit": "*"
}
```

The `TestingKitServiceProvider` is auto-discovered by Laravel.

Publish the config (optional) to override the user models, default emails, role name, or the OpenAPI spec path:

```
php artisan vendor:publish --tag=testing-kit-config
```

### Config

[](#config)

`config/testing-kit.php` (after publishing):

KeyDefaultPurpose`user_model``App\Models\User`Model class used by `UserFactory``admin_user_model``Brackets\AdminAuth\Models\AdminUser`Model class used by `AdminUserFactory``authenticated_user_id``123`Default id used by `actingAsCustomer()` / `actingAsAdminUser()` when none is passed`dummy_csrf_token``'csrf-token-mock'`Token put into the test session`default_locale``'en'`Locale set in `createApplication()``default_user_email``'test@example.com'`Email pinned on customer fixtures`default_admin_user_email``'admin@example.com'`Email pinned on admin user fixtures`default_admin_role``'Administrator'`Role assigned to admin user fixtures via Spatie `HasRoles``openapi.spec_path``storage_path('api-docs/openapi.json')`Spec file used by `ApiTestCase``openapi.regenerate_command``'l5-swagger:generate'`Artisan command to regenerate the spec`openapi.regenerate_on_init``true`Whether `ApiTestCase::setUp` regenerates the specUsage
-----

[](#usage)

### Web test (HTML snapshot + download assertion)

[](#web-test-html-snapshot--download-assertion)

```
use DejwCake\TestingKit\Functional\WebTestCase;
use DejwCake\TestingKit\Attributes\Context;

final class InstructionsControllerTest extends WebTestCase
{
    #[Context(user: 'customer')]
    public function testCustomerCanDownloadInstruction(): void
    {
        $response = $this->get(route('web/instructions/show', ['legoSet' => 5]));

        $response->assertOk();
        $this->assertDownload($response, 'dummy.pdf');
    }
}
```

### API test (OpenAPI validation)

[](#api-test-openapi-validation)

```
use DejwCake\TestingKit\Functional\ApiTestCase;
use DejwCake\TestingKit\Attributes\Context;

final class PostsControllerTest extends ApiTestCase
{
    #[Context(user: 'customer')]
    public function testCustomerCanListPosts(): void
    {
        $response = $this->getJson(route('api/posts/index'));

        $response->assertOk();
        $this->assertValidOpenApiResponseForRoute('GET', 'api/posts/index', $response);
    }
}
```

### Acting as an admin

[](#acting-as-an-admin)

`#[Context(user: 'admin-user')]` resolves the guard from `admin-auth.defaults.guard` (Spatie `HasRoles` then sees the admin guard, so the role lookup matches the admin-auth installation migration). The fixture admin user has `id` = `testing-kit.authenticated_user_id`.

Issues
------

[](#issues)

If something is not working as expected, please open an issue in the main repository .

How to develop this project
---------------------------

[](#how-to-develop-this-project)

### Composer

[](#composer)

Update dependencies:

```
docker compose run -it --rm test composer update
```

Composer normalization:

```
docker compose run -it --rm php-qa composer normalize
```

### Run tests

[](#run-tests)

Run tests with pcov:

```
docker compose run -it --rm test ./vendor/bin/phpunit -d pcov.enabled=1
```

To regenerate snapshots use:

```
docker compose run -it --rm test ./vendor/bin/phpunit -d pcov.enabled=1 -d --update-snapshots
```

To switch between postgresql and mariadb change in `docker-compose.yml` DB\_CONNECTION environmental variable:

```
- DB_CONNECTION: pgsql
+ DB_CONNECTION: mysql

```

### Run code analysis tools (php-qa)

[](#run-code-analysis-tools-php-qa)

PHP compatibility:

```
docker compose run -it --rm php-qa phpcs --standard=.phpcs.compatibility.xml --cache=.phpcs.cache
```

Code style:

```
docker compose run -it --rm php-qa phpcs -s --colors --extensions=php
```

Fix style issues:

```
docker compose run -it --rm php-qa phpcbf -s --colors --extensions=php
```

Static analysis (phpstan):

```
docker compose run -it --rm php-qa phpstan analyse --configuration=phpstan.neon
```

Mess detector (phpmd):

```
docker compose run -it --rm php-qa phpmd ./config,./src,./tests ansi phpmd.xml --suffixes php --baseline-file phpmd.baseline.xml
```

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance97

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

4

Last Release

25d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7587c47435caa968be9a652630c6c0c91abacb43dfa001b02cbe5b892672cd7e?d=identicon)[dejwCake](/maintainers/dejwCake)

---

Tags

testingphpunitlaravelcmscraftable

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

### Embed Badge

![Health badge](/badges/dejwcake-testing-kit/health.svg)

```
[![Health](https://phpackages.com/badges/dejwcake-testing-kit/health.svg)](https://phpackages.com/packages/dejwcake-testing-kit)
```

###  Alternatives

[moonshine/moonshine

Laravel administration panel

1.3k239.9k72](/packages/moonshine-moonshine)[sentry/sentry-laravel

Laravel SDK for Sentry (https://sentry.io)

1.4k122.6M183](/packages/sentry-sentry-laravel)[orchestra/testbench

Laravel Testing Helper for Packages Development

2.2k41.3M38.3k](/packages/orchestra-testbench)[spatie/laravel-export

Create a static site bundle from a Laravel app

670139.5k6](/packages/spatie-laravel-export)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.4M506](/packages/shopware-core)[kirschbaum-development/laravel-openapi-validator

Automatic OpenAPI validation for Laravel HTTP tests

581.2M5](/packages/kirschbaum-development-laravel-openapi-validator)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
