Tester: Exited with HTTP code 201 (expected 200)

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

Vytvoril jsem na sandboxu jednoduchy test, jak to odsimulovat:

$ composer create-project nette/sandbox error-code
$ cd error-code

app/presenters/TestPresenter.php

<?php

namespace App\Presenters;

use Nette\Http;

class TestPresenter extends BasePresenter
{
        public function actionDefault()
        {
                $this->getHttpResponse()->setCode(Http\IResponse::S201_CREATED);
                $this->terminate();
        }
}

tests/TestPresenter.phpt

<?php

namespace Test;

use Nette;
use Tester;
use Tester\Assert;

$container = require __DIR__ . '/bootstrap.php';

class TestPresenterTest extends Tester\TestCase
{
        private $container;

        function __construct(Nette\DI\Container $container)
        {
                $this->container = $container;
        }

        function testActionDefault()
        {
                $presenterFactory = $this->container->getByType('Nette\Application\IPresenterFactory');
                $presenter = $presenterFactory->createPresenter('Test');
                $request = new \Nette\Application\Request(
                        'Test',
                        'GET',
                        [ 'action' => 'default' ]
                );
                $presenter->run($request);
                Assert::same(201, $presenter->context->getService('http.response')->getCode());
        }

}


$test = new TestPresenterTest($container);
$test->run();
$ php ./vendor/bin/tester tests
 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v1.7.1

Note: No php.ini is used.
PHP 5.6.17-0+deb8u1 | php-cgi | 8 threads

.F

-- FAILED: error-code/tests/TestPresenter.phpt
   Exited with HTTP code 201 (expected 200)


FAILURES! (2 tests, 1 failure, 0.6 seconds)

Editoval skrivy (8. 4. 2016 13:42)

Michal Vyšinský
Člen | 608
+
0
-

Ahoj,
první parameter je očekáváná (expected) hodnota, druhý parametr je aktuální (actual) výsledek. Jinak v testu bys měl mít jasně dáno, co chceš mít jako výsledek, takže pokud presenter vrací 200, tak uprav test a očekávej 200, pokud chceš, aby presenter vracel 201, tak uprav presenter.

skrivy
Člen | 51
+
0
-

Prohozeno.

Assert::same(201, $presenter->context->getService('http.response')->getCode());

Pri manualnim testu ten http pozadavek konci kodem 201, coz je v poradku.

HTTP/1.1 201

Jinak problem stale pretrvava.

Editoval skrivy (8. 4. 2016 12:52)

zarubik
Člen | 31
+
+4
-

Při testovaní přes php-cgi je zapnuta kontrola HTTP code 200. Je třeba přidat do anotací @httpCode 201 nebo any.

<?php

/**
 * @httpCode any
 */

namespace Test;

use Nette;
use Tester;
use Tester\Assert;

$container = require __DIR__ . '/bootstrap.php';

viz https://tester.nette.org/cs/#…