gpt4 book ai didi

laravel - 测试 Laravel-Excel 下载

转载 作者:行者123 更新时间:2023-12-02 21:11:57 25 4
gpt4 key购买 nike

我正在使用以下软件包:https://github.com/Maatwebsite/Laravel-Excel在版本 2 中,Laravel 版本 5.1

我有带有以下代码的 Controller 方法:

....
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();

以上测试输出[错误]: header 已从 this line 发送包的。

Controller 方法工作正常,但无法测试。

我尝试使用 --stderr 参数运行 phpunit。在这种情况下,不会引发错误,但它只是将 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 包中的错误还是我测试错误?

最佳答案

那是因为 laravel-excel 中 download 方法的工作方式是通过设置 header 。您想避免这种情况,而是通过返回 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() 方法,该方法将返回 Excel 文件的二进制数据,并允许您将其作为响应数据传递。

关于laravel - 测试 Laravel-Excel 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com