2015-08-07 4 views
3

Я использую следующий пакет: https://github.com/Maatwebsite/Laravel-Excel в версии 2 с Laravel версии 5.1Тестирование Laravel-Excel скачать

Я попавшей метод контроллера с помощью следующего кода:

.... 
return Excel::create('List', function($excel) use ($list) 
{ 
    $excel->sheet('List', function($sheet) use ($list) 
    { 
    $sheet->fromModel($list); 
    }); 
}) 
->download('csv'); 

и простой тест, как это :

$this->call('GET', 'route/to/csv', [ 
    'param' => 'value', 
]); 

$this->dump(); 

Выше тестовых выходов [ERROR]: Headers already sent из this line пакета.

Метод контроллера работает нормально, но не может его проверить.

Я попытался запустить phpunit с параметром --stderr. В этом случае ошибка не возникает, но она просто выгружает вывод CSV-файла на консоль и выходит. Я также попытался запустить тест с @runInSeparateProcess аннотацию и получил ошибки как:

PHPUnit_Framework_Exception: PHP Notice: Constant LARAVEL_START already defined in bootstrap/autoload.php on line 3 
.... 
PHP Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in vendor/laravel/framework/src/Illuminate/Container/Container.php:736 

Может ли это быть ошибка в пакете Laravel-Excel или я проверяю это неправильно?

ответ

0

Thats потому, что способ download работает в laravel-excel, устанавливая заголовки. Вы хотите этого избежать, и вместо этого выполняйте всю свою работу, возвращая ответы на laravel.

Попробуйте вместо этого:

$file = Excel::create('List', function($excel) use ($list) { 
    $excel->sheet('List', function($sheet) use ($list) 
    { 
    $sheet->fromModel($list); 
    }); 
})->string('xls'); 

return new Response($file, 200, [ 
      'Content-Type' => 'application/vnd.ms-excel; charset=UTF-8', 
      'Content-Disposition' => 'attachment; filename="' . $file->filename . '.' . $file->ext . '"', 
      'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT', // Date in the past 
      'Last-Modified' => Carbon::now()->format('D, d M Y H:i:s'), 
      'Cache-Control' => 'cache, must-revalidate', 
      'Pragma' => 'public', 
     ]); 

Основное отличие заключается в использовании метода string() который будет возвращать двоичные данные файла первенствовать и позволяет передать его в качестве данных для ответа.

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

  • Нет связанных вопросов^_^