Wie vermeiden Sie die Umleitung zur Seite „Cookies“ während des Controller-Unit-Tests?
-
16-10-2019 - |
Frage
Ich mache einen sehr einfachen Controller -Test mithilfe Ecomdev_PHPUnit
:
class Foo_BarWishlist_Test_Controller_IndexController
extends EcomDev_PHPUnit_Test_Case_Controller
{
/**
* @test
* @loadFixture ~Foo_BarWishlist/default
*/
public function fromcartAction()
{
$this->dispatch('checkout/cart/add', array('product' => 10));
$this->assertRequestDispatched();
$body = self::getResponse()->getOutputBody();
$this->assertResponseBodyContains('success-msg');
}
...
Dieser Test schlägt fehl, weil $body
ist leer. Beim Überprüfen self::getResponse()
genauer gesagt, ich sehe das eine Weiterleitung zum enable-cookies
CMS -Seite wurde gesendet.
Wie kann ich mich darum kümmern? Muss ich den Check-Cookie manuell einstellen? Muss ich vorher eine andere Seite öffnen (ich habe schon a ausprobiert $this->dispatch('/')
vor dem tatsächlichen Versand)? Oder gibt es während der Controller -Tests ein allgemeines Cookie -Problem?
Lösung
Im Administratorbereich gibt es eine Einstellung:
Web> (Erkennung von Browserfunktionen) Umleitung auf CMS-PAGE, wenn Cookies deaktiviert sind
Diese Einstellung kann auch während der Tests mit einem Konfigurationsgerät eingestellt werden.
Andere Tipps
Ich glaube, diese Antwort über den Stapelüberlauf wird helfen:
https://stackoverflow.com/questions/14612349/cant-get-session-session-singleton-in-ecomdev-phpunittest
Die Grundidee besteht darin, die Sitzung zu verspotten, sodass Ihre Aktion "Hinzufügen zum Karren" erfolgreich ist, anstatt auf die Seite "Cookies Deaktiviert" umzuleiten.
$sessionMock = $this->getModelMockBuilder('admin/session')
// This one removes `session_start` and other methods
->disableOriginalConstructor()
// Enables original methods usage, because by default it overrides all methods
->setMethods(null)
->getMock();
$this->replaceByMock('singleton', 'admin/session', $sessionMock);