docler-labs / codeception-slim-module
Codeception Module for Slim framework.
Installs: 68 750
Dependents: 1
Suggesters: 0
Security: 0
Stars: 13
Watchers: 8
Forks: 4
Open Issues: 0
Requires
- php: ^8.0
- codeception/codeception: ^5.0
- codeception/lib-innerbrowser: ^3.0 || ^4.0
- slim/psr7: ^1.3
- slim/slim: ^4.7
Requires (Dev)
- ext-json: *
- bamarni/composer-bin-plugin: ^1.8
- codeception/module-asserts: ^3.0
- codeception/module-rest: ^3.0
README
This module allows you to run functional tests inside Slim 4 Microframework without HTTP calls, so tests will be much faster and debug could be easier.
Inspiration comes from herloct/codeception-slim-module library.
Install
Minimal requirements
- php:
^8.0
- slim/slim:
^4.7
- codeception/codeception:
^5.0
If you don't know Codeception, please check Quickstart Guide first.
If you already have Codeception installed in your Slim application, you can add codeception-slim-module with a single composer command.
composer require --dev docler-labs/codeception-slim-module
For PHP 7 support, please use docler-labs/codeception-slim-module:^2.0
version
composer require --dev docler-labs/codeception-slim-module "^2.0"
If you use Slim v3, please use the previous version from library:
composer require --dev docler-labs/codeception-slim-module "^1.0"
Configuration
Example (test/suite/functional.suite.yml
)
modules: enabled: - REST: depends: DoclerLabs\CodeceptionSlimModule\Module\Slim config: DoclerLabs\CodeceptionSlimModule\Module\Slim: application: path/to/application.php
The application
property is a relative path to file which returns your Slim\App
instance.
Here is the minimum application.php
content:
require __DIR__ . '/vendor/autoload.php'; use Slim\Factory\AppFactory; $app = AppFactory::create(); // Add routes and middlewares here. return $app;
Testing your API endpoints
class UserCest { public function getUserReturnsWithEmail(FunctionalTester $I): void { $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendGET('/users/John'); $I->seeResponseCodeIs(200); $I->seeResponseContainsJson( [ 'email' => 'john.doe@example.com', ] ); } }