Я следую настройке тестирования для Slim с PHPUnit @ http://there4development.com/blog/2013/10/13/unit-testing-slim-framework-applications-with-phpunit/
Изначально у меня была вся моя логика в анонимной функции
$app->get('/video/', function () use ($app) {
// all code goes here
}
и тестирование через PHPUnit работало отлично...
public function testVideoCountInPage1() {
$this->get('/video/');
$this->assertEquals(200, $this->response->status());
$rawResponse = $this->response->body();
$jsonResponse = json_decode($rawResponse);
$this->assertSame(20, count($jsonResponse->data));
}
Но теперь я разделил основную логику в `get('/video/') на несколько функций, например:
$app->get('/video/', function () use ($app) {
// some logic
$db = openDB($dbConfig);
$page = findPageParameter($app->request()->params());
// some logic
}
function openDB($dbConfig) {
// open DB here
return $db;
}
function findPageParameter($params) {
// find page here
return (int)$page;
}
Тем не менее я получаю правильный ответ для вызова конечной точки /video
. Но модульные тесты терпят неудачу, говоря
.PHP Fatal error: Cannot redeclare openDB() (previously declared in /var/www/traffic/app/routes/video.php:69) in /var/www/traffic/app/routes/video.php on line 75
Обновление: эта ошибка была исправлена, как только я заменил пару require
на require_once
. Но теперь утверждения в тестах не говорят
1) videoTest::testVideoCountInPage1
Failed asserting that 404 matches expected 200.
когда я вызываю ту же конечную точку http://localhost/traffic/index.php/video
, я получаю статус 200 с правильными результатами. Когда PHPUnit вызывает ту же конечную точку, он возвращает 404.
Обновление 2: модульные тесты, в которых я тестирую отдельные функции openDB()
и findPageParameter()
, работают нормально. Только окончательное тестирование API SLIM REST завершается с ошибкой 404...
Ссылка:
- video.php (https://github.com/GethuGames/Traffic-Violation-Portal-REST-API/blob/toDB/app/routes/video.php)
- videoTest.php (https://github.com/GethuGames/Traffic-Violation-Portal-REST-API/blob/toDB/tests/integration/videoTest.php) (Конечное тестирование не удалось)
- videoUnitTest.php (https://github.com/GethuGames/Traffic-Violation-Portal-REST-API/blob/toDB/tests/unit/videoUnitTest.php) (работающие модульные тесты)
- Весь проект @ https://github.com/GethuGames/Traffic-Violation-Portal-REST-API/tree/toDB
require/include_once
вместоrequire/include
. - person pavel   schedule 22.07.2014openDB()
определена в строках 69 и 75 того же файла (video.php
) - person Phil   schedule 22.07.2014video.php
внизу, но теперь утверждение не выполняется.. - person saiy2k   schedule 22.07.2014