edmondscommerce / mock-server
...
Installs: 2 782
Dependents: 2
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 6
Requires
- php: ~7.1
- ext-fileinfo: *
- symfony/http-foundation: ~4
- symfony/routing: ~4
Requires (Dev)
- edmondscommerce/phpqa: ^2.0
- guzzlehttp/guzzle: ~6
- phpstan/phpstan-phpunit: ^0.10.0
This package is auto-updated.
Last update: 2024-10-22 23:20:11 UTC
README
By Edmonds Commerce
Installation
PHP 7.0
Install via composer
composer require edmondscommerce/mock-server:~1 --dev
PHP 7.1+
Install via composer
composer require edmondscommerce/mock-server:~2 --dev
Usage
To start the web server, you need to instantiate the \EdmondsCommerce\MockServer\MockServer
and call startServer
<?php $mockServer=\EdmondsCommerce\MockServer\Factory::getMockServer(); $mockServer->startServer();
Configuration
When using the Factory, the configuration for the MockServer is pulled from MockServerConfig
which in turn checks for values in the $_SERVER
superglobal - generally populated with any thing that has been exported from your environment.
The default values are fairly sensible though. Based upon the project root, the default configuration expects you to have a tests
folder which in turn contains a MockServer
folder. Inside the MockServer folder we expect a router.php
file and a htdocs
folder which contains static assets to be served directly.
Note - this is exactly as it has been configured in this library.
Router
An example of a basic router set up can be found in router.php
The router file should contain an instance of the \EdmondsCommerce\MockServer\StaticRouter
which is a wrapper around
Symfony's router class. The file should load the Composer autoloader and create the static router before registering routes for different URIs.
The router supports static file routes, callback routes and text routes.
Note - there are helpful includes routerTop.php and routerBottom.php which handle some basic boilerplate for you.
Template
Here is a template router for you to start with:
<?php declare(strict_types=1); require __DIR__.'/../../vendor/edmondscommerce/mock-server/src/include/routerTop.php'; $router = \EdmondsCommerce\MockServer\Factory::getStaticRouter(); //Add your routes here /** * IMPORTANT - you have to `return` the required routerBottom */ return require __DIR__.'/../../vendor/edmondscommerce/mock-server/src/include/routerBottom.php';
Starting the server manually
To start the server manually, you can simply use start-mock-server which will start a backgrounded mock server. If you want it in the foreground, simply pass "foreground" as an argument
./bin/start-mock-server foreground
If you want the server to listen on a specific IP address, you can do this by exporting a config variable:
export MockServer_Ip="0.0.0.0"
Router Types
Static Files (css/js/html/etc...)
Static files that are located in the htdocs folder will be served without any further configuration
For the full list of support file types, see: StaticRouter::STATIC_EXTENSIONS_SUPPORTED
Callback
The callback router sets a closure which will be passed the request object and must return a response object.
See this test for an exmaple of a callback.
File Download
The download router will return a file as a download. Internally it sets a callback that then returns a BinaryFileResponse object
Static Text
Second param of addRoute($uri, $response)
is the text that will be returned after visiting specified uri.
See this test for an example of text route.
Static
Second param of addStaticRuote($uri, $response)
is the the file content that will be returned after visiting specified uri.
Do not use this to return files that are in the htdocs folder, it's pointless. This is largely being kept for legacy reasons.