Behat аутентифицирует пользователя Symfony2

Я использую Behat в Symfony2 / Doctrine2. Теперь у меня есть этот сценарий, который сводится к тому, что «если я вошел в систему и перейду в / login, я должен перейти в / вместо»:

@login
Scenario: Go to the login page while being logged in
  Given I am logged in
  When I go to "/login"
  Then I should be on "/"

Для @login я создал следующее:

/**
 * @BeforeScenario @login
 */
public function loginUser()
{
    $doctrine = $this->getContainer()->get('doctrine');
    $userRepository = $doctrine->getRepository('MyTestBundle:User');
    $user = $userRepository->find(1); // 1 = id

    $token = new UsernamePasswordToken($user, NULL, 'main', $user->getRoles());
    $this->getContainer()->get('security.context')->setToken($token);
}

В коде «когда я перехожу в / login» (вызывается контроллер) токен кажется пропавшим (не то, что я намеревался):

/**
 * @Route("/login", name="login")
 */
public function loginAction()
{
    $token = $this->get('security.context')->getToken();
    $fd = fopen('/tmp/debug.log', 'a');
    fwrite($fd, $token);

    // prints 'AnonymousToken(user="anon.", authenticated=true, roles="")'
    ...

Но в FeatureContext он, кажется, остается (как я надеялся, Работа). В «Учитывая, что я вошел в систему»:

/**
 * @Given /^I am logged in$/
 */
public function iAmLoggedIn()
{        
    $token = $this->getContainer()->get('security.context')->getToken();
    $fd = fopen('/tmp/debug.log', 'a');
    fwrite($fd, $token);

    // prints 'UsernamePasswordToken(user="admin", authenticated=true, roles="ROLE_ADMIN")'
    ...

Я запускаю behat следующим образом:

app/console -e=test behat

Я также сделал это в контроллере, чтобы убедиться, что это тест:

fwrite($fd, $this->get('kernel')->getEnvironment());
// prints 'test'

Есть какие-нибудь подсказки, как аутентифицировать пользователя? Мне придется протестировать множество административных страниц, поэтому было бы неплохо, если бы я мог подключить логин к @BeforeSuite, @BeforeFeature (или @BeforeScenario ...), чтобы меня не заблокировали.

(Также приветствуются предложения об отключении механизма аутентификации для тестирования или способе заглушить / имитировать пользователя.)

12
задан tvlooy 12 November 2011 в 22:26
поделиться