[英]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.