0

我正在尝试使用此处的 vsf-stream 对适用于 csv 文件的隔离方法进行单元测试:https ://github.com/mikey179/vfsStream

我创建了一个二维数据数组进行测试,但是当我尝试将其添加到模拟文件时,它似乎解析换行符,而不是添加新行。我都试过了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 文件将不起作用,因为它似乎都写在一个长行中:

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而不是printecho查看结果。var_dump将给出变量的描述性和文字表示,而不解析\n字符 -printecho打印并解析\n字符。

因此,上面的代码有效,问题在于我的愚蠢或睡眠不足。

于 2014-03-05T21:28:12.440 回答