簡體   English   中英

PHPUnit POST請求未使用Symfony2發送參數

[英]PHPUnit POST request not sending parameters with Symfony2

我正在編寫一個Symfony2 PHPUnit功能測試來測試表單頁面。 在測試中,我試圖創建一個包含表單參數的POST請求,將其發送到createAction,然后斷言頁面已重新路由。 問題是我的控制器未收到請求參數。 我的測試是:

$client = static::createClient();
$client->followRedirects();

$client->request('POST', '/create/adviseeSet', array(
        'name' => 'Monkey Hour',
        'advisor' => '523',
        'day' => 'Monday',
        'year' => '20'
    ),
    array()
);

$this->assertTrue($client->getResponse()->isRedirect());

控制器操作開始如下:

public function createAction(Request $request) {
    $params = $request->request->all();
    var_dump($params);
    // create entity and reroute user
}

var_dump輸出是一個空數組。 但是,如果我將請求方法更改為GET,

$client->request('GET', '/create/adviseeSet', array(
        'name' => 'Monkey Hour',
        'advisor' => '523',
        'day' => 'Monday',
        'year' => '20'
    ),
    array()
);

和var_dump請求的查詢

$params = $request->query->all();

我看到了我的參數!

   array(4) {
     ["advisor"]=>
   string(3) "523"
     ["day"]=>
   string(6) "Monday"
     ["name"]=>
   string(11) "Monkey Hour"
     ["year"]=>
   string(2) "20"
   }

如何獲得POST請求以使其在GET請求中也能正常執行?

如果您正在編寫功能測試,則應始終檢查html輸出,例如var_dump($client->getResponse()->getContent())
也許您忘記了添加csrf令牌。 這是示例:

$csrfToken = $client->getContainer()->get('form.csrf_provider')
     ->generateCsrfToken('form_intention');

$client->request('POST', '/create/adviseeSet', array(
    'name' => 'Monkey Hour',
    'advisor' => '523',
    'day' => 'Monday',
    'year' => '20',
    '_token' => $csrfToken
    )
);

$crawler = $client->followRedirect();

$this->assertTrue(...);

不要忘記在表單類型中添加意圖:

$resolver->setDefaults(array(
            //some params 
            'intention' => 'form_intention',
        ));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM