ここから vsf-stream を使用して、csv ファイルで動作するメソッドを分離して単体テストしようとしています: https://github.com/mikey179/vfsStream
テスト用に 2 次元データ配列を作成しましたが、これをモック ファイルに追加しようとすると、新しい行を追加する代わりに、改行文字を解析するようです。両方試しましたがfputcsv
、fputs
どちらも同じ結果です。通常のファイルに正常に書き込むことができる同じデータとphp関数を使用すると、問題はvfs-streamにあるようです。ネット上にはあまりドキュメントがなく、完全に失われました:
$this->data = array(
array( 'col1', 'col2', 'col3', 'col4' ),
array( 'row 0 1', 'row 0 2', ' row 0 3', ' row 0 4' ),
array( 'row 1 1', 'row 1 2', ' row 1 3', ' row 1 4' ),
array( 'row 2 1', 'row 2 2', ' row 2 3', ' row 2 4' ),
array( 'row 3 1', 'row 3 2', ' row 3 3', ' row 3 4' ),
array( 'row 4 1', 'row 4 2', ' row 4 3', ' row 4 4' ),
array( 'row 5 1', 'row 5 2', ' row 5 3', ' row 5 4' ),
);
$this->root = vfsStream::setup('test-dir');
$file = vfsStream::url('test-dir/foo.csv');
$handle = fopen($file, "a+");
foreach( $this->data as $arr)
fputcsv($handle, $arr, "|"); //$content .= implode("|", $arr) . "\n";
上記のコードはモック ファイルを生成しますが、改行文字がないため、テストの後半でモック csv ファイルを解析しても、すべてが 1 つの長い行に記述されているように見えるため、機能しません。
var_dump( file_get_contents( $file ) );
生成されます:
string(272) "col1|col2|col3|col4\n"row 0 1"|"row 0 2"|" row 0 3"|" row 0 4"\n"row 1 1"|"row 1 2"|" row 1 3"|" row 1 4"\n"row 2 1"|"row 2 2"|" row 2 3"|" row 2 4"\n"row 3 1"|"row 3 2"|" row 3 3"|" row 3 4"\n"row 4 1"|"row 4 2"|" row 4 3"|" row 4 4"\n"row 5 1"|"row 5 2"|" row 5 3"|" row 5 4"\n"
私はこれのフラグがなく、バグではないことを願っています。どんな助けでも感謝します、乾杯。