Symfony2 で CSRF Validation を ON にした時のテストの書き方
CSRF Validation を 有効にしている時のテストの書き方を調べた。
stackoverflow でそれっぽいものを発見(testing - Get the CSRF token in test - Stack Overflow)。
$crawler = $client->request('GET', '/test'); $extract = $crawler->filter('input[name="HIDDEN_TAG_NAME[_token]"]') ->extract(array('value')); $csrfToken = $extract[0]; $client->request('POST', '/test', [ '_token' => $csrfToken ]);
HIDDEN_TAG_NAME を hidden タグのname 属性に置き換えればOK。
Crawler から Form を生成して submit とかでもいけるのかもしれないが、
以下のようなエラーが出たので client から POSTした。
InvalidArgumentException: The current node list is empty.
ちなみに、stackoverflow で2つ目に回答されている方法だと、弾かれてしまう。
同じ現象が発生した方の記事によると、セッションが違うからダメなのかもしれないということ
(Symfony勉強会 #6 LTの補足 コントローラのテストを短くする試み | karakaram-blog)。