Integration testing helpers for the Slim Framework
For a full example, please see the companion repo at there4/slim-unit-testing-example.
Here's a test for a very simple endpoint that returns the version from the
application config. We're asserting that Slim responded with a 200
and that
the version matches what we expect.
class VersionTest extends LocalWebTestCase {
public function testVersion() {
$this->client->get('/version');
$this->assertEquals(200, $this->client->response->status());
$this->assertEquals($this->app->config('version'), $this->client->response->body());
}
}
Here is an example on how to pass data to a POST endpoint in a test case and retrieve it later in the endpoint.
We are passing encoded JSON data in the body of the request.
The data is retrieved in the endpoint using $app->request->getBody()
.
// test file
class UserTest extends LocalWebTestCase {
public function testVersion() {
......
$data = array("user" => 1);
$data = json_encode($data);
$this->client->post('/user', $data);
......
}
}
// endpoint file
.....
$app->post('/user', function() use ($app){
.....
$data = $app->request->getBody();
$data = json_decode($data, true);
......
});
If you wish to use Database fixture, use class WebDbTestCase
. Caution: make sure the names you use for you fixture models won't conflict with your actual DB tables.
class LocalDbWebTestCase extends \There4\Slim\Test\WebDbTestCase {
/**
* You must implement this method
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
public function getDataSet() {
return $this->createFlatXMLDataSet(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fixture.xml');
}
}
You'll need a bootstrap file for phpunit that can instantiate your Slim application. You can see [an example boostrap] in the sample app.
You'll implement your own getSlimInstance()
method that returns an instance of
your app by extending the WebTestCase
helper.