コントローラー単位テスト中に「クーキを有効にする」ページへのリダイレクトを回避するにはどうすればよいですか?
-
16-10-2019 - |
質問
私は非常にシンプルなコントローラーテストを使用しています 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');
}
...
このテストは失敗します $body
空です。チェックするとき self::getResponse()
もっと密接に、私はにリダイレクトが enable-cookies
CMSページが送信されました。
どうすればこれの世話をすることができますか?チェッククッキーを手動で設定する必要がありますか?前に別のページを開く必要がありますか(私はすでに試しました $this->dispatch('/')
実際の派遣の前)?または、コントローラーテスト中に一般的なCookieの問題はありますか?
解決
管理パネルには、次の設定があります。
Web>(ブラウザ機能検出)Cookieが無効になっている場合、CMS-PAGEにリダイレクトします
この設定は、設定フィクスチャを使用したテスト中に設定することもできます。
他のヒント
私はこのスタックオーバーフローの答えが役立つと思います:
https://stackoverflow.com/questions/14612349/cant-session-singleton-in-ecomdev-phpunit-test
基本的なアイデアは、セッションをock笑することです。そのため、「Cookies Disabled」ページにリダイレクトする代わりに、「カートに追加」アクションが成功します。
$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);
所属していません magento.stackexchange