build(); // .xlsx = ZIP → сигнатура «PK». PDF был бы «%PDF». expect(substr($bytes, 0, 2))->toBe('PK'); // читаем свой же пример своим парсером: заголовок отсеётся, номера останутся $path = tempnam(sys_get_temp_dir(), 'ex').'.xlsx'; file_put_contents($path, $bytes); $rows = (new ClientSmsPhoneFileReader)->read($path); @unlink($path); expect($rows)->not->toBeEmpty(); // образцы — валидные российские номера foreach ($rows as $r) { expect(PhoneNormalizer::normalize($r))->not->toBeNull(); } });