Testování REST API pomocí Nette Tester

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fary
Člen | 155
+
0
-

zrovna resim jednu aplikaci, kde je potreba implementovat rest api a idealne toto api i otestovat. snazim se o to za pomoci nette testeru a k tomu pouzivam utilitu HttpServer z projektu Kdyby. jeden z testu vypada takto:

<?php

namespace Tests\Api\Presenters;

use Tester;
use Tester\Assert;
use Kdyby\TesterExtras\HttpServer;
use GuzzleHttp;
use Nette\Utils\Json;

require __DIR__ . '/../bootstrap.php';

/**
 * @testCase
 */
class CountryPresenterTest extends Tester\TestCase
{
    public function testActionGet()
    {
        $server = new HttpServer;
        $server->start(__DIR__ . '/../index.php');
        $client = new GuzzleHttp\Client;
        $response = $client->get($server->getUrl() . 'api/country', [
            'headers' => ['USER-TOKEN' => 'api-token'],
            'http_errors' => false,
            'synchronous' => true,
        ]);
        Assert::same(200, $response->getStatusCode());
        $json = $response->getBody()->getContents();
        $res = Json::decode($json);
        Assert::type('array', $res);
        Assert::count(258, $res);
        Assert::same($res[0]->name, 'Afghánistán');
        Assert::same($res[1]->name, 'Alandské ostrovy');
    }
}

$testCase = new CountryPresenterTest;
$testCase->run();

problem je, ze request se provede v poradku a vrati se mi json ($json = $response->getBody()->getContents();), ovsem na konci toho json retezce je pripojeno ‚Error: This test forgets to execute an assertion.‘ primo v samotne response. nesetkal se s timto nekdo? popr. jakym zpusobem testujete rest api vy?

jiri.pudil
Nette Blogger | 1029
+
+1
-

Ten serverový index.php je přímo aplikační index, nebo používáš nějaký upravený pro testy? Nejspíš upravený kvůli namockování služeb apod., že? Nevoláš v něm někde Tester\Environment::setup()?

fary
Člen | 155
+
0
-

@jiri.pudil ano, presne tak. je to upraveny soubor primo pro testy, ale tedy odstranil jsem z nej Tester\Environment::setup() a ted to funguje spravne. diky :)