skeleton - ¿Cómo escribo pruebas unitarias para una API REST integrada en Slim Framework?
slim framework tutorial pdf (4)
Tengo un API construido en Slim como este:
$app->group(''/''.$endpoint, function () use ($app, $endpoint) {
$handler = Api/Rest/Handlers/Factory::load($endpoint);
if (is_null($handler)) {
throw new /Exception(''No REST handler found for ''.$endpoint);
}
$app->get(''(/:id)'', function ($id) use ($app, $handler) {
echo json_encode($handler->get($id));
});
$app->post('''', function () use ($app, $handler) {
echo json_encode($handler->post($app->request->post()));
});
$app->put('':id'', function ($id) use ($app, $handler) {
echo json_encode($handler->put($id, $app->request->put()));
});
$app->delete('':id'', function ($id) use ($app, $handler) {
echo json_encode($handler->delete($id));
});
});
$endpoint
es una cadena, por ejemplo ''usuario'';
¿Cómo hago para escribir pruebas unitarias para ello?
Idealmente;
class RestUserTest extends PHPUnitFrameworkTestCase
{
public function testGet()
{
$slim = ''''; // my slim app
// set route ''api/user/1'' with method GET
// invoke slim
// ensure that what we expected to happen did
}
}
(La clase de controlador REST haría trivial burlarse de los resultados que normalmente serían respaldados por un DB).
Es el meollo de la cuestión de cómo falsificar la solicitud en Slim que no sé cómo hacer.
Puedes tener una oportunidad con estas pautas . Te puede ayudar. Lo probé para uno de mis proyectos delgados.
Déjame saber si eso ayuda.
Codigos
<?php
require_once __DIR__ . ''/../vendor/autoload.php'';
use Slim/Environment;
class RoutesTest extends PHPUnit_Framework_TestCase
{
public function request($method, $path, $options = array())
{
// Capture STDOUT
ob_start();
// Prepare a mock environment
Environment::mock(array_merge(array(
''REQUEST_METHOD'' => $method,
''PATH_INFO'' => $path,
''SERVER_NAME'' => ''slim-test.dev'',
), $options));
$app = new /Slim/Slim();
$this->app = $app;
$this->request = $app->request();
$this->response = $app->response();
// Return STDOUT
return ob_get_clean();
}
public function get($path, $options = array())
{
$this->request(''GET'', $path, $options);
}
public function testIndex()
{
$this->get(''/'');
$this->assertEquals(''200'', $this->response->status());
}
}
Código completo alojado en Gist. mira esto
Soy el autor y encargado actual de este proyecto: https://github.com/there4/slim-unit-testing-example
Utiliza algunos ayudantes para facilitar la prueba de integración de las aplicaciones Slim.
Vea las pruebas Slim, por ejemplo, sobre cómo simular Slim/Environment
para imitar una solicitud entrante. Puede comenzar aquí: https://github.com/codeguy/Slim/blob/master/tests/SlimTest.php#L332
puede utilizar Codeception API testing / Unit Testing. Echa un vistazo al siguiente link