SheetsTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace Tests\Importers;
  3. use Dcat\EasyExcel\Contracts\Sheet;
  4. use Dcat\EasyExcel\Contracts\Sheets;
  5. use Dcat\EasyExcel\Excel;
  6. use Dcat\EasyExcel\Support\SheetCollection;
  7. use Tests\TestCase;
  8. class SheetsTest extends TestCase
  9. {
  10. /**
  11. * @group importer
  12. */
  13. public function testToArray()
  14. {
  15. $sheetsArray = $this->makeSheets()->toArray();
  16. $this->validateArray($sheetsArray);
  17. }
  18. /**
  19. * @group importer
  20. */
  21. public function testToCollection()
  22. {
  23. $sheetCollection = $this->makeSheets()->collect();
  24. $this->assertInstanceOf(SheetCollection::class, $sheetCollection);
  25. $this->validateArray($sheetCollection->toArray());
  26. }
  27. /**
  28. * @group importer
  29. */
  30. public function testEach()
  31. {
  32. $sheet = null;
  33. $this->makeSheets()->each(function (Sheet $value) use (&$sheet) {
  34. $sheet = $value;
  35. });
  36. $this->assertInstanceOf(Sheet::class, $sheet);
  37. }
  38. /**
  39. * @group importer
  40. */
  41. public function testGetByIndex()
  42. {
  43. $sheets = $this->makeSheets();
  44. $this->assertInstanceOf(Sheet::class, $sheet1 = $sheets->index(0));
  45. $this->assertInstanceOf(Sheet::class, $sheet2 = $sheets->index(1));
  46. $this->validateArray([
  47. $sheet1->getName() => $sheet1->toArray(),
  48. $sheet2->getName() => $sheet2->toArray(),
  49. ]);
  50. }
  51. /**
  52. * @group importer
  53. */
  54. public function testGetByName()
  55. {
  56. $sheets = $this->makeSheets();
  57. $this->assertInstanceOf(Sheet::class, $sheet1 = $sheets->index('name1'));
  58. $this->assertInstanceOf(Sheet::class, $sheet2 = $sheets->index('name2'));
  59. $this->validateArray([
  60. $sheet1->getName() => $sheet1->toArray(),
  61. $sheet2->getName() => $sheet2->toArray(),
  62. ]);
  63. }
  64. /**
  65. * 验证内容是否正确.
  66. *
  67. * @param array $sheetsArray
  68. */
  69. protected function validateArray(array $sheetsArray)
  70. {
  71. $this->assertIsArray($sheetsArray);
  72. $this->assertEquals(count($sheetsArray), 2);
  73. $this->assertTrue(isset($sheetsArray['name1']));
  74. $this->assertTrue(isset($sheetsArray['name2']));
  75. foreach ($sheetsArray as $name => &$values) {
  76. $this->assertIsArray($values);
  77. $this->assertEquals(count($values), 30);
  78. foreach ($values as &$row) {
  79. $row = $this->convertDatetimeObjectToString($row);
  80. }
  81. }
  82. $users = include __DIR__.'/../resources/users.php';
  83. $this->assertEquals(
  84. array_values($sheetsArray['name1']),
  85. array_slice($users, 0, 30)
  86. );
  87. $this->assertEquals(
  88. array_values($sheetsArray['name2']),
  89. array_values(array_slice($users, 30, 30))
  90. );
  91. }
  92. protected function makeSheets()
  93. {
  94. $file = __DIR__.'/../resources/test-sheets.xlsx';
  95. $sheets = Excel::xlsx($file)->sheets();
  96. $this->assertInstanceOf(Sheets::class, $sheets);
  97. return $sheets;
  98. }
  99. }