Testování Presenteru – proč RedirectingResponse?

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

Ahoj,
chci jednoduše ozkoušet, zda-li se mi rozeběhne Presenter a vše je tedy v pořádku:

/**
 * Tests if running the presenter leads to RenderResponse.
 */
public function testRun() {
	$presenter = new Web_SamplePresenter;
	$response = $presenter->run(new PresenterRequest('Web:Sample', 'GET', array()));
	$this->assertType('RenderResponse', $response);
}

Proč mi to ale vyhodí RedirectingResponse na http:///?presenter=Sample? HomepagePresenter vyhazuje RenderResponse, nejspíš ovšem kvůli tomu, že je nastaven jako výchozí v SimpleRouteru:

$router[] = new SimpleRouter(array(
	'module' => 'Web',
	'presenter' => 'Homepage',
	'action' => 'default',
));

Nevím, kde je chyba – proč se SamplePresenter chce přesměrovávat na adresu, která je navíc špatně? (aplikace běží normálně pod http://localhost/example/document_root/, ale jelikož spouštím testy z příkazové řádky, tak to ani přes Apache nejde).

David Grudl
Nette Core | 8218
+
0
-

Asi by to chtělo pro ten presenter vypnout přesměrování na kanonické url, tj. $presenter->autoCanonicalize = FALSE.

Ondřej Mirtes
Člen | 1536
+
0
-

To by ale znamenalo toto dělat pro každý testovaný Presenter kromě toho výchozího, pokud bych chtěl opravdu tu response, která má nastat – RedirectingResponse bych čekal v momentě, kdy volám $this->redirect(). Takže nejspíš dělám něco špatně?

Mimochodem, proč je autoCanonicalize v Presenteru (který má být od URL úplně odstíněn) a ne v routách?