WithChunkQueryTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace Tests\Exporters\CSV;
  3. use Dcat\EasyExcel\Excel;
  4. use Dcat\EasyExcel\Support\SheetCollection;
  5. use Tests\Exporters\Exporter;
  6. use Tests\TestCase;
  7. class WithChunkQueryTest extends TestCase
  8. {
  9. use Exporter;
  10. /**
  11. * @group exporter
  12. */
  13. public function testStore()
  14. {
  15. $users = include __DIR__.'/../../resources/users.php';
  16. $storePath = $this->generateTempFilePath('csv');
  17. $collection = (new SheetCollection($users));
  18. // 保存
  19. Excel::export()
  20. ->chunk(function (int $times) use ($collection) {
  21. $chunkSize = 10;
  22. return $collection->forPage($times, $chunkSize)->toArray();
  23. })
  24. ->store($storePath);
  25. // 读取
  26. $this->assertSingleSheet($storePath, 0, $users);
  27. /*
  28. |---------------------------------------------------------------
  29. | 测试多个sheet
  30. |---------------------------------------------------------------
  31. */
  32. $users1 = new SheetCollection(array_slice($users, 0, 30));
  33. $users2 = new SheetCollection(array_values(array_slice($users, 30, 30)));
  34. $storePath = $this->generateTempFilePath('csv');
  35. $chunkSize = 10;
  36. Excel::csv()->chunk([
  37. 'sheet1' => function (int $times) use ($users1, $chunkSize) {
  38. return $users1->forPage($times, $chunkSize);
  39. },
  40. 'sheet2' => function (int $times) use ($users2, $chunkSize) {
  41. return $users2->forPage($times, $chunkSize);
  42. },
  43. ])->store($storePath);
  44. // 读取
  45. $this->assertSingleSheet($storePath, 0, $users);
  46. }
  47. public function testRaw()
  48. {
  49. $users = include __DIR__.'/../../resources/users.php';
  50. $storePath = $this->generateTempFilePath('csv');
  51. $collection = (new SheetCollection($users));
  52. // 保存
  53. $contents = Excel::csv()
  54. ->chunk(function (int $times) use ($collection) {
  55. $chunkSize = 10;
  56. return $collection->forPage($times, $chunkSize)->toArray();
  57. })
  58. ->raw();
  59. $this->assertIsString($contents);
  60. file_put_contents($storePath, $contents);
  61. // 读取
  62. $this->assertSingleSheet($storePath, 0, $users);
  63. /*
  64. |---------------------------------------------------------------
  65. | 测试多个sheet
  66. |---------------------------------------------------------------
  67. */
  68. $users1 = new SheetCollection(array_slice($users, 0, 30));
  69. $users2 = new SheetCollection(array_values(array_slice($users, 30, 30)));
  70. $storePath = $this->generateTempFilePath('csv');
  71. $chunkSize = 10;
  72. $contents = Excel::csv()->chunk([
  73. 'sheet1' => function (int $times) use ($users1, $chunkSize) {
  74. return $users1->forPage($times, $chunkSize);
  75. },
  76. 'sheet2' => function (int $times) use ($users2, $chunkSize) {
  77. return $users2->forPage($times, $chunkSize);
  78. },
  79. ])->raw();
  80. $this->assertIsString($contents);
  81. file_put_contents($storePath, $contents);
  82. // 读取
  83. $this->assertSingleSheet($storePath, 0, $users);
  84. }
  85. }