2012-03-08 7 views
4

私はSymfony2のセッションサービスを使ってデータを取得するアクションのための機能テストを書いています。私のテストクラスのsetUpメソッドでは、私は$this->get('session')->set('foo', 'bar');と呼んでいます。 setUpまたは実際のテスト方法ですべてのセッションデータ(print_r($this->get('session')->all());を使用)を出力すると、私はfoo => barに戻ります。しかし、テストされているアクションからセッションデータを出力しようとすると、空の配列に戻ります。誰がなぜこれが起こっているのか、そして私がそれを防ぐ方法を知っていますか?機能テスト中にSymfony2のセッションサービスでデータを保持する方法はありますか?

$_SESSION['foo'] = 'bar'setUp()から呼び出すと、データは持続され、私はそのアクションからアクセスできます。この問題は、Symfony2のセッションサービスにとってはローカルのようです。それでも動作しない場合は、セッションを保存してください

$client = static::createClient(); 
$container = $client->getContainer(); 

::私はdidnの

$session = $container->get('session'); 
$session->set('foo', 'bar'); 
$session->save(); 

答えて

6

まず(私はあなたがのWebTestCaseを使用していると仮定している)クライアントのコンテナを使用してみてください機能テストでは試してみませんが、それはBehatの手順で動作する方法です。

+0

これは動作しますが、欠点は、私は、各テストメソッド内でこれをしなければならないということです。私は 'setUp'メソッドのように、よりグローバルなスコープでそれを行う方法を探します。または私はBehatを試してみるかもしれません:)あなたの答えをありがとう! –

0

「セッション」サービスを取得できます。このサービスで 、次のことができます。

    が要求
にセッションIDを持つクッキーを渡し
  • 、セッションを保存
  • 、セッションにいくつかのパラメータを設定し
  • 、セッションを開始
  • コードは次のとおりです:

    use Symfony\Component\BrowserKit\Cookie; 
    .... 
    .... 
    public function testARequestWithSession() 
    { 
        $client = static::createClient(); 
        $session = $client->getContainer()->get('session'); 
        $session->start(); // optional because the ->set() method do the start 
        $session->set('foo', 'bar'); // the session is started here if you do not use the ->start() method 
        $session->save(); // important if you want to persist the params 
        $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); // important if you want that the request retrieve the session 
    
        $client->request(.... ... 
    

    $セッション - >のgetId(とクッキー)がセッションの開始後に作成する必要があります

    参照ドキュメントhttp://symfony.com/doc/current/testing/http_authentication.html#creating-the-authentication-token

  • 関連する問題