0

ここから vsf-stream を使用して、csv ファイルで動作するメソッドを分離して単体テストしようとしています: https://github.com/mikey179/vfsStream

テスト用に 2 次元データ配列を作成しましたが、これをモック ファイルに追加しようとすると、新しい行を追加する代わりに、改行文字を解析するようです。両方試しましたがfputcsvfputsどちらも同じ結果です。通常のファイルに正常に書き込むことができる同じデータと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"

私はこれのフラグがなく、バグではないことを願っています。どんな助けでも感謝します、乾杯。

4

1 に答える 1

0

問題は、var_dump代わりに、printまたはecho結果を表示するために使用していました。var_dump変数の説明的でリテラルな表現を提供し、文字を解析しないか、\n文字を出力して解析します。printecho\n

したがって、上記のコードは機能し、私の愚かさまたは睡眠不足が問題です。

于 2014-03-05T21:28:12.440 に答える