PHPackages                             fillincode/tests - 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. fillincode/tests

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

fillincode/tests
================

A package for simplified work with tests in Laravel

4.0.5(10mo ago)0660MITPHPPHP ^8.1

Since Jan 17Pushed 10mo ago2 watchersCompare

[ Source](https://github.com/pulsar88/tests)[ Packagist](https://packagist.org/packages/fillincode/tests)[ RSS](/packages/fillincode-tests/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (1)Versions (20)Used By (0)

Fillincode-tests
================

[](#fillincode-tests)

Быстрая генерация тестов без необходимости писать всю логику тестирования вручную.

Возможности пакета:

1. Пакет выполняет тестирования middleware маршрута,
2. Запросы от каждого пользователя, определенного в конфигурации,
3. Тестирование запросов с передачей данных,
4. Тестирование запросов с передачей параметров адресной строки,
5. Проверка кода ответа для каждого теста,
6. Заполнение данными БД перед выполнением запроса,
7. Создание насмешек

Installation
------------

[](#installation)

```
composer require fillincode/tests
```

Публикация конфигурации

```
php artisan vendor:publish --provider="Fillincode\Tests\TestServiceProvider"
```

Config
------

[](#config)

Конфигурация находится в файле config/fillincode\_tests.php

Необходимо указать дефолтные коды ответа для пользователей, а также для невалидных данных и параметров адресной строки

```
[
    'user' => 200,
    'admin' => 200,
    'guest' => 401,

    'invalid_data' => 422,
    'invalid_parameters' => 404,
];
```

Необходимо указать, какие пользователи есть в системе и какие guards проверяют их авторизацию. Для guest не нужно указывать guard

```
'users' => [
    'guest',
    'user' => 'Passport',
    'admin' => 'web',
],
```

Commands
--------

[](#commands)

Сгенерирует базовый класс для функциональных тестов, который содержит основную логику тестов

```
php artisan f-tests:init
```

Генерирует класс теста. С помощью этой же команды можно выбрать интерфейсы, который реализует класс. Методы будет автоматически добавлены в класс

```
php artisan make:f-test
```

Пример первоначальной настройки пакета
--------------------------------------

[](#пример-первоначальной-настройки-пакета)

Необходимо в конфигурации указать, какие есть пользователи в системе, дефолтные коды ответа для этих пользователей.

```
return [
    'web_user' => 200,
    'api_user' => 200,
    'admin' => 200,
    'guest' => 401,

    'invalid_data' => 422,
    'invalid_parameters' => 404,

    'has_fillincode_swagger_parser' => true,

    'users' => [
        'guest',
        'web_user' => 'web',
        'api_user' => 'Passport'
        'admin' => 'Moonshine',
    ],
];
```

После чего выполнить команду для генерации класса. В этом классе будут реализованы методы тестирования от каждого пользователя.

```
php artisan f-tests:init
```

Затем реализовать методы либо в BaseFeatureTest, либо в TestCase для получения этих пользователей.

```
use App\Models\User;

    ````

/**
 * Получения пользователя web_user
 *
 * @return User
 */
public function getWebUser(): User
{
    return User::whereEmail('web_user@gmail.com')->first();
}

/**
 * Получения пользователя api_user
 *
 * @return User
 */
public function getApiUser(): User
{
    return User::whereEmail('api_user@gmail.com')->first();
}

/**
 * Получения пользователя admin
 *
 * @return User
 */
public function getAdmin(): User
{
    return User::whereEmail('admin@gmail.com')->first();
}
```

Возможности пакета для тестов
-----------------------------

[](#возможности-пакета-для-тестов)

### Изменения дефолтных кодов для текущего маршрута

[](#изменения-дефолтных-кодов-для-текущего-маршрута)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/CodeInterface
2. Реализовать метод getCodes

```
use Fillincode\Tests\Interfaces\CodeInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements CodeInterface
{
    /**
     * {@inheritDoc}
     */
    public function getCodes(): array
    {
        return [
            'guest' => 401,
            'web_user' => 200,
            'api_user' => 401,
            'admin' => 401,
        ];
    }
}
```

### Изменения дефолтных кодов для передачи невалидных параметров в адресной строке

[](#изменения-дефолтных-кодов-для-передачи-невалидных-параметров-в-адресной-строке)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/ParametersCodeInterface
2. Реализовать метод getCodesForInvalidParameters

```
use Fillincode\Tests\Interfaces\ParametersCodeInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements ParametersCodeInterface
{
    /**
     * {@inheritDoc}
     */
    public function getCodesForInvalidParameters(): array
    {
        return [
            'guest' => 404,
            'web_user' => 404,
            'api_user' => 404,
            'admin' => 404,
        ];
    }
}
```

### Передача параметров во время тестирования

[](#передача-параметров-во-время-тестирования)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/ParametersInterface
2. Реализовать методы getParameters и getInvalidParameters

Первый метод должен вернуть корректные параметры адресной строки, второй метод должен вернуть некорректные параметры адресной строки

```
use Fillincode\Tests\Interfaces\ParametersInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements ParametersInterface
{
    /**
     * {@inheritDoc}
     */
    public function getParameters(): array
    {
        return [
            'project' => Project::factory()->create(['status' => 'active'])
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getInvalidParameters(): array
    {
        return [
            'project' => Project::factory()->create(['status' => 'draft'])
        ];
    }
}
```

### Валидация данных

[](#валидация-данных)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/ValidateInterface
2. Реализовать методы getValidData и getNotValidData.

Первый метод должен вернуть валидные данные, второй метод должен вернуть невалидные данные

```
use Fillincode\Tests\Interfaces\ValidateInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements ValidateInterface
{
    /**
     * {@inheritDoc}
     */
    public function getValidData(): array
    {
        return [
            'name' => 'test_name',
            'age' => 12,
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getNotValidData(): array
    {
        return [
            'name' => 'q',
            'age' => null,
        ];
    }
}
```

### Заполнение БД данными перед выполнением каждого запроса

[](#заполнение-бд-данными-перед-выполнением-каждого-запроса)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/FakeInterface
2. Реализовать метод faker. В этом методе нужно будет выполнить логику заполнения данными БД

```
use Fillincode\Tests\Interfaces\FakeInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements FakeInterface
{
    /**
     * {@inheritDoc}
     */
    public function faker(): void
    {
        Project::factory(10)->create(['web_user_id' => $this->getWebUser()->id]);
    }
}
```

### Создание фейкового хранилища данных

[](#создание-фейкового-хранилища-данных)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/FakeStorageInterface

Для теста, который реализует этот интерфейс автоматически будет создано фейковое public хранилище

```
use Fillincode\Tests\Interfaces\FakeStorageInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements FakeStorageInterface
{

}
```

### Насмешка в тестах

[](#насмешка-в-тестах)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/MockInterface
2. Реализовать метод getMockAction

```
use Fillincode\Tests\Interfaces\MockInterface;
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest implements MockInterface
{
    /**
     * {@inheritDoc}
     */
    public function getMockAction(): void
    {
        Http::fake();
    }
}
```

### Если пакет работает в связке с пакетом Fillincode/Swagger и есть маршруты, которые не нужно документировать

[](#если-пакет-работает-в-связке-с-пакетом-fillincodeswagger-и-есть-маршруты-которые-не-нужно-документировать)

1. Необходимо имплементировать интерфейс Fillincode/Tests/Interfaces/DocIgnoreInterface

    ```
    use Fillincode\Tests\Interfaces\DocIgnoreInterface;
    use Tests\Feature\BaseFeatureTest;

    class ExampleTest extends BaseFeatureTest implements DocIgnoreInterface
    {

    }
    ```
2. В классе BaseFeatureTest в метод callRouteAction добавить

    ```
    if (! $this->checkDocIgnoreInterface()) {
        (new TestParser())->makeAutoDoc($testResponse);
    }
    ```

Пример использования пакета
---------------------------

[](#пример-использования-пакета)

Для минимального тестирования достаточно создать класс, который будет наследником класса BaseFeatureTest и реализовать методы getRouteName и getMiddleware

```
use Tests\Feature\BaseFeatureTest;

class ExampleTest extends BaseFeatureTest
{
    /**
     * {@inheritDoc}
     */
    public function getRouteName(): string
    {
        return 'api.user.update';
    }

    /**
     * {@inheritDoc}
     */
    public function getMiddleware(): array
    {
        return ['api', 'auth'];
    }
}
```

Пример класса, который реализует все возможности пакета.

Возможности класса:

1. Выполнит запросы от всех пользователей, которые определенны в конфигурации пакета,
2. Выполнит тесты с отправкой параметров адресной строки
3. Передаст данные для валидации,
4. Создаст фейковое хранилище файлов,
5. Подделает фасад Http,
6. Проигнорирует документирование результатов тестирования
7. Заполнит базу 10 проектами

```
use Tests\Feature\BaseFeatureTest;
use Fillincode\Tests\Interfaces\CodeInterface;
use Fillincode\Tests\Interfaces\ParametersCodeInterface;
use Fillincode\Tests\Interfaces\ParametersInterface;
use Fillincode\Tests\Interfaces\ValidateInterface;
use Fillincode\Tests\Interfaces\FakeInterface;
use Fillincode\Tests\Interfaces\FakeStorageInterface;
use Fillincode\Tests\Interfaces\MockInterface;
use Fillincode\Tests\Interfaces\DocIgnoreInterface;

class ExampleTest extends BaseFeatureTest implements CodeInterface, ParametersCodeInterface, ParametersInterface, ValidateInterface, FakeInterface, FakeStorageInterface, MockInterface, DocIgnoreInterface
{
    /**
     * {@inheritDoc}
     */
    public function getRouteName(): string
    {
        return 'api.user.update';
    }

    /**
     * {@inheritDoc}
     */
    public function getMiddleware(): array
    {
        return ['api', 'auth'];
    }

    /**
     * {@inheritDoc}
     */
    public function getCodes(): array
    {
        return [
            'guest' => 401,
            'web_user' => 200,
            'api_user' => 401,
            'admin' => 401,
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getCodesForInvalidParameters(): array
    {
        return [
            'guest' => 404,
            'web_user' => 404,
            'api_user' => 404,
            'admin' => 404,
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getParameters(): array
    {
        return [
            'project' => Project::factory()->create(['status' => 'active'])
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getInvalidParameters(): array
    {
        return [
            'project' => Project::factory()->create(['status' => 'draft'])
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getValidData(): array
    {
        return [
            'name' => 'test_name',
            'age' => 12,
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function getNotValidData(): array
    {
        return [
            'name' => 'q',
            'age' => null,
        ];
    }

    /**
     * {@inheritDoc}
     */
    public function faker(): void
    {
        Project::factory(10)->create(['web_user_id' => $this->getWebUser()->id]);
    }

    /**
     * {@inheritDoc}
     */
    public function getMockAction(): void
    {
        Http::fake();
    }
}
```

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance55

Moderate activity, may be stable

Popularity13

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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 ~36 days

Recently: every ~99 days

Total

17

Last Release

303d ago

Major Versions

1.0.2 → 2.1.02024-02-09

2.1.3 → 3.0.02024-03-27

3.0.3 → 4.0.12024-07-24

PHP version history (3 changes)2.0.0PHP ^8.0

1.0.0PHP ^7.4|^8.0

4.0.1PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3817489?v=4)[pulsar88](/maintainers/pulsar88)[@pulsar88](https://github.com/pulsar88)

---

Top Contributors

[![KoryaginDmitry](https://avatars.githubusercontent.com/u/81314264?v=4)](https://github.com/KoryaginDmitry "KoryaginDmitry (10 commits)")

### Embed Badge

![Health badge](/badges/fillincode-tests/health.svg)

```
[![Health](https://phpackages.com/badges/fillincode-tests/health.svg)](https://phpackages.com/packages/fillincode-tests)
```

###  Alternatives

[orchestra/testbench

Laravel Testing Helper for Packages Development

2.2k41.3M38.7k](/packages/orchestra-testbench)[hotmeteor/spectator

Testing helpers for your OpenAPI spec

3051.5M1](/packages/hotmeteor-spectator)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135212.4k7](/packages/statamic-rad-pack-runway)[guanguans/laravel-soar

SQL optimizer and rewriter for laravel. - laravel 的 SQL 优化器和重写器。

2228.3k](/packages/guanguans-laravel-soar)[spurwork/spectator

Testing helpers for your OpenAPI spec

3041.5k](/packages/spurwork-spectator)[ecotone/laravel

Ecotone for Laravel — CQRS, Event Sourcing, Sagas, Durable Workflows, and Outbox on top of Laravel Queue, via PHP attributes.

21313.7k3](/packages/ecotone-laravel)

PHPackages © 2026

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