Я пытался выполнить модульный тест, модифицируя примеры кода других людей, и каждый раз, когда я дохожу до того, что мои тесты выполняются без ошибок — я просто получаю те же сбои, когда ожидаю, что они пройдут. В Интернете не так много документации, и я не знаю, куда еще можно пойти с этим. Может кто-нибудь увидеть, где в моем коде я иду не так:
bootstrap.php (файл начальной загрузки phpunit)
В основном это просто контейнер для объекта $ app. Я запускаю объект $ app с теми же файлами, с которыми я запускаю свое реальное приложение (маршруты, конфиг).
<?php
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname('../'));
// require composer autoloader for loading classes
require 'vendor/autoload.php';
// app container class - singleton pattern
class App
{
// Hold an instance of the class
private static $instance;
public static function getInstance()
{
if (!isset(self::$instance)) {
// Instantiate a Slim application:
$app = new \Slim\Slim(array(
'mode' => getenv('APPLICATION_ENV') ?: 'production',
));
// set configuration
require 'app/config.php';
// include the routes (always after we've instantiated our app instance)
require 'app/routes.php';
self::$instance = $app;
}
return self::$instance;
}
}
Далее мой тестовый файл с одним тестом:
AccountsControllerTest.php
<?php
use Slim\Environment;
class AccountsControllerTest extends PHPUnit_Framework_TestCase {
public static function get($path)
{
Environment::mock(array(
'REQUEST_METHOD' => 'GET',
'PATH_INFO' => $path,
));
$app = App::getInstance();
//$app->middleware[0]->call();
$app->response()->finalize();
return $app->response();
}
public function testIndex() {
$response = $this->get('/accounts');
$this->assertContains('Accounts', $response->getBody());
}
}
Надеюсь, немного понятно, что я пытаюсь сделать. В основном просто проверьте наличие «Аккаунтов» (которое при загрузке в браузере присутствует)
Ниже приведен результат, который я получаю:
$ vendor/bin/phpunit
PHPUnit 4.3.4 by Sebastian Bergmann.
Configuration read from /var/www/shared-views-slim/phpunit.xml
F
Time: 33 ms, Memory: 4.75Mb
There was 1 failure:
1) AccountsControllerTest::testIndex
Failed asserting that '' contains "Accounts".
/var/www/shared-views-slim/tests/app/controllers/AccountsControllerTest.php:30
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
ОБНОВИТЬ:
routes.php
<?php
// Define a HTTP GET route:
$app->group('/accounts', function () use ($app) {
$controller = new App\Controllers\AccountsController($app);
// index
$app->get('/', function () use ($controller) {
$controller->index();
});
// show
$app->get('/:id', function ($id) use ($controller) {
$controller->show($id);
})->conditions(array('id' => '[1-9]([0-9]*)'));
// create
// form
$app->get('/create', function () use ($controller) {
$controller->create();
});
// action
$app->post('/', function () use ($controller) {
$controller->create();
});
// update
// form
$app->get('/:id/edit', function ($id) use ($controller) {
$controller->update($id);
})->conditions(array('id' => '[1-9]([0-9]*)'));
// action
$app->put('/:id', function ($id) use ($controller) {
$controller->update($id);
});
// delete
// form
$app->get('/:id/delete', function ($id) use ($controller) {
$controller->delete($id);
})->conditions(array('id' => '[1-9]([0-9]*)'));
//action
$app->delete('/:id', function ($id) use ($controller) {
$controller->delete($id);
});
});
Задача ещё не решена.
Других решений пока нет …