2015-02-13 4 views
1

Я пытаюсь написать тест, который проверяет некоторые действия, выполненные только с зарегистрированными пользователями. так что мне нужно пройти через Laravel 5 процесса аутентификации (с _token)laravel 5 exception Illuminate Session TokenMismatchException в модульном тесте

это мой тестовый класс

class ImportTest extends TestCase { 

      private $files = array(); 
      /** 
      * Creates the application. 

     * 
     * @return \Illuminate\Foundation\Application 
     */ 
     public function createApplication() 
     { 
       $app = require __DIR__.'/../bootstrap/app.php'; 

       $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 

       return $app; 
     } 

     private function beTheUser(){ 

      $this->be(User::all()->first()); 
     } 


     public function testAccessImportPageAjaxLoggedIn(){ 
      $this->beTheUser(); 
      $import = Import::all()->first(); 
      if($import!=null){ 
       $this->call('POST','[email protected]',array(
        'import_id' => $import->id, 
        '_token' => Session::token() 
       )); 
       $this->assertResponseStatus('404'); 
      } 


      $this->assertTrue(TRUE); 
     } 
} 

и когда я пытаюсь проверить функцию с тест PHPUnit, я получил testing.ERROR: exception Illuminate\Session\TokenMismatchException

кто-нибудь знает обходной путь?

+1

Попробуйте добавить 'Session :: start()' в метод 'setUp()'. – lukasgeiter

ответ

0

один из возможных решений, так как @lukasgeiter пятнистый, чтобы написать эту линию

 public function beTheUser { 
      Session::start(); 
      $this->be(User::all()->first()); 

     } 

Мне также нужно было добавить эту строку в начале файла.

use Session; 

и не использование use Symfony\Component\HttpFoundation\Session\Session;

затем при необходимости в функции ...

 $this->call('POST','/documents/import/'.$import->id,array(
      '_token' => Session::get('_token') 
     )); 
//or 


     $this->call('POST','/documents/import/'.$import->id,array(
      '_token' => Session::token() 
     )); 
+1

Вы можете использовать 'Session :: token()' хотя – lukasgeiter

Смежные вопросы