2016-06-15 13 views
0

I die folgenden DateistrukturPHP fopen() Fehler bei der Prüfung

src/functions.php

src/sample.csv

tests/functionsTest.php

In der functions.php, habe ich diese Funktion zum Lesen einer CSV-Datei

<?php 
function readCSV($csvFile){ 
     $file_handle = fopen($csvFile, 'r'); 
     while (!feof($file_handle)) { 
      $line_of_text[] = fgetcsv($file_handle, 1024); 
     } 
     fclose($file_handle); 
     return $line_of_text; 
    } 
?> 

Im functionsTest.php Datei, ich habe

<?php 

require_once('src/functions.php'); 
use phpunit\framework\TestCase; 

class test extends TestCase { 

    public function testReadDataFromFile() { 
     $filename = "./sample.csv"; 
     $data = readCSV($filename); 
     $this->assertEquals("test data", $data); 
    } 
} 
?> 

Wenn ich den Test-Code mit > phpunit Tests/functionsTest.php laufen, bekomme ich Fehler sagen

fopen(./sample.csv): failed to open stream: No such file or directory 

Aber wenn ich die Funktion von der gleichen src/functions.php aufrufen, bekomme ich die Daten

print_r(readCSV("sample.csv")); 

So habe ich versucht, die sample.csv Datei in den Testordner zu verschieben -

Tests/sample.csv

aber noch habe ich den gleichen Fehler

Ich denke, ich vermisse etwas Einfaches. Kann mir jemand dabei helfen?

Antwort

2

Das liegt daran, dass der einzelne Punkt . das aktuelle Verzeichnis darstellt. Wenn Sie Ihr Skript von tests/ aufrufen und . angeben, suchen Sie in Ihrem Verzeichnis sample.csv nach src/.

Sie möchten das Verzeichnis angeben, mit $filename = "../src/sample.csv";

Beachten Sie auch, dass Sie magic constants stattdessen oder geben Sie einen absoluten Pfad zur Datei (z /YourName/YourProject/src/sample.csv), anstelle eines relativen man verwenden möchten.

P.S. Sie können diese magischen Konstanten wie __FILE__ und __DIR__ ausdrucken, wenn Sie Ihr Skript ausführen, um Probleme wie diese zu beheben.