Я создаю функциональный тест в Symfony, используя Liip functional test bundle.Функциональный тест Symfony2 Недоступное поле «_token»
Я в настоящее время заклеен при отправке формы.
Я пытаюсь добавить новый «журнал», используя функциональный тест.
Если я пытаюсь добавить новый журнал корыто интерфейс я получаю следующие параметры запроса:
'WorkLog' => array(
'submit' => '',
'hours' => '8',
'minutes' => '0',
'note' => 'some text',
'_token' => '4l5oPcdCRzxDKKlJt_RG-B1342X52o0C187ZLLVWre4'
);
Но когда тест отправляет форму, я получаю те же параметры, но без маркеров
'WorkLog' => array(
'submit' => '',
'hours' => '8',
'minutes' => '0',
'note' => 'some text'
);
я думал, что я мог бы решить эту проблему, добавив «» _token поля для запроса вида, но когда я побежал, то испытание снова он дал мне ошибку:
InvalidArgumentException: Unreachable field "_token"
Код функционального теста:
namespace App\AdminBundle\Tests\Controller;
use Liip\FunctionalTestBundle\Test\WebTestCase;
use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\BrowserKit\Cookie;
class LogControllerTest extends WebTestCase
{
private $client;
private $em;
private $fixtures;
public function setUp()
{
$this->client = static::makeClient();
$this->em = $this->client->getContainer()->get('doctrine')->getManager();
$this->fixtures = $this->loadFixtures(array(
'App\AdminBundle\DataFixtures\ORM\LoadUserData',
'App\AdminBundle\DataFixtures\ORM\LoadSubscriptionTypesData',
'App\AdminBundle\DataFixtures\ORM\LoadSubscriptionData',
'App\AdminBundle\DataFixtures\ORM\LoadWorkLogData',
))->getReferenceRepository();
}
public function testAddNewLog()
{
$accountId = $this->fixtures->getReference('userAccount')->getId();
// log in with admin account
$this->logIn('adminAccount');
$crawler = $this->client->request('GET', '/admin/worklog/account/'.$accountId.'/add');
$csrfToken = $this->client->getContainer()->get('form.csrf_provider')->generateCsrfToken('post_type');
$form = $crawler->selectButton('WorkLog_submit')->form(array(
'WorkLog' => array(
'hours' => '8',
'minutes' => '0',
'note' => 'some text',
'_token' => $csrfToken
),
), 'POST');
$crawler = $this->client->submit($form);
}
}
Мой вопрос: Как я могу отправить форму с маркером?
Я на самом деле пытаюсь передать тестовый дескриптор форме так же, как пользователь будет это делать. Вот почему я пытаюсь отправить форму с помощью искателя. Я попробую ваше решение, если я не могу понять это в ближайшее время. – Szenis
@Szenis: Я столкнулся с той же проблемой, вы нашли решение или используете решение Matteo? –
@AlexandreT Я использовал решение, предоставленное Matteo – Szenis