2016-04-27 2 views
0

В симфони файле 3 контроллера У меня есть функция:behat 3 норка тестирование Перенаправление

/** 
    * @Route("/user/registration", name="post_registration") 
    * @Method("POST") 
    * @return mixed 
    */ 
    public function postRegistration() 
    { 
     $post = $this->getAllPost(); 

     $this->curl = $this->get('ApiClient'); 

     $responseArray = $this->curl->post(
      $this->container->getParameter('api_url') . '/users', 
      $post 
     ); 

     if (isset($responseArray['api_key'])) { 
      return $this->redirectResponseWithCookie($responseArray['api_key']); 
     } else { 

      return $this->render(
       static::REGISTRATION_TEMPLATE, 
       ['errors' => $responseArray['errors']] 
      ); 
     } 
    } 

В одной части она вызывает функцию

redirectResponseWithCookie() 

, который должен перенаправить страницу.

Я хочу проверить заголовок перенаправления - имеет ли он правильное значение местоположения.

У меня есть функция в классе UserRegistrationContext

class UserRegistrationContext extends BaseContext implements Context, SnippetAcceptingContext 
{ 

/** 
* @When I register successfully into the system 
* @return null 
*/ 
public function iRegisterSuccessfullyIntoTheSystem() 
{ 

    $this->canIntercept(); 
    $this->session->getDriver()->getClient()->followRedirects(false); 

    // Enters his data 
    // Posts to www.notification.guru . 
    $this->session->getDriver()->getClient() 
     ->request('POST', $this->baseUrl . '/user/registration', $this->getFormArray()); 

    echo 'test'; 

} 
} 

класс BaseContext только есть некоторые вспомогательные функции, его конструктора inits сессии:

$driver = new GoutteDriver(); 
$this->session = new Session($driver); 

эта часть может быть неправильно:

$this->session->getDriver()->getClient()->followRedirects(false); 

Я только что взял код от behent 2.5 и попытался настроить его с помощью behat 3, но не уверен, что он правильный, но, по крайней мере, не вызывает ошибки.

Это должно остановить перенаправление, и тогда я мог бы получить заголовок ответа с

getResponseHeaders() 

Но проблема в том, что он пытается перенаправить, и код не удается, потому что реальный сайт не сумели запустить еще где он перенаправляет. А также я не смог бы проверить заголовки, которые, я думаю, после реального перенаправления.

Поэтому перенаправление необходимо остановить, я думаю.

Как это сделать? Я не могу найти информацию.

Тест терпит неудачу на линии

$this->session->getDriver()->getClient() 
     ->request('POST', $this->baseUrl . '/user/registration', $this->getFormArray()); 
+0

На самом деле я вижу, что нет никакой ошибки в этом коде, я не видел, а в консоли после выполнения теста. –

ответ

1

Так код в моем вопросе не так, как я сказал в комментарии - я не видел, а в консоли. Часто случается так, что когда я отправляю в SO, я даже не заканчиваю писать вопрос, просто от написания деталей к другим, я вижу ответ.

$this->session->getDriver()->getClient()->followRedirects(false); 

хорошо работает.

Так, чтобы закончить, как проверить - сделать функцию что-то вроде этого, и назвать его:

/** 
* @param Behat\Mink\Session $session - mink session 
* @throws \Exception 
* @return null 
*/ 
public function isLoggedIntoApi($session) 
{ 
    $headers = $session->getResponseHeaders(); 

    if ($headers['Location'][0] != $this->appUrl) { 
     throw new \Exception(
      'User is not redirected to ' . $this->appUrl 
     ); 
    } 
} 
Смежные вопросы