2016-06-02 7 views
5

Laravel API経由でCSVファイルをアップロードし、PHPUnitでアップロードをテストしたいと思います。PHPUnitでテストする方法。 Laravelで書かれたAPIを使用したCSVファイルのアップロード?

コントローラのstore()の機能とtestCreate()の機能は基本的にどのように見えますか?

<?php 

use Illuminate\Foundation\Testing\DatabaseTransactions; 
use Illuminate\Foundation\Testing\WithoutMiddleware; 

class ProspectListControllerTest extends TestCase 
{ 

use WithoutMiddleware, DatabaseTransactions; 

public function testCreate() 
{ 

    $file = new Symfony\Component\HttpFoundation\File\UploadedFile(storage_path('/crm/data/test-file.csv'), 'test-file.csv', 'text/plain', 446, null, true); 

    $this->call('POST', '/api/lists-imports/', [], [], ['csv_file' => $file]); 
    $this->dump()->assertResponseOk(); 
    } 
} 

とコントローラのメソッドは次のようになります:

この

は私がこれまでに得たものである

<?php 

namespace App\Http\Controllers; 

use App\ListImport; 
use Illuminate\Http\Request; 

class ListImportController extends Controller 
{ 
public $model = ListImport::class; 

public function store(Request $request, ListImport $importList) 
{ 
    $request->file('importFile')->move(public_path('storage.crm.data'), $request->file('importFile')->getClientOriginalName()); 

    $importList->importFile = public_path('storage.crm.data') . '/' . $request->file('importFile')->getClientOriginalName(); 

    $importList->save(); 

} 
} 

すべてのヘルプは理解されるであろう:)

+1

testCreate関数内であなたの代わりに、アップロード自体なしの文字列としてcsvファイルをシミュレートすることができますか? 私はテストケースでxmlファイルを扱っていました –

+1

ファイルが保存されている場合、 'store()'の単体テストが対象です。より良いテストは 'assertStringEqualsFile()'です。最初の引数は '$ importList-> importFile'で、2番目の引数は' $ file'でなければなりません。このテストでは、応答ステータス以外のものもカバーします。 – user1965074

答えて

0

はの新しい方法がありますLaravelでファイルのアップロードをテストします。 https://laravel-news.com/testing-file-uploads-with-laravel

それはこのようなものです:(ドキュメントから)

public function testAvatarUpload() 
{ 
    Storage::fake('avatars'); 

    $response = $this->json('POST', '/avatar', [ 
     'avatar' => UploadedFile::fake()->image('avatar.jpg') 
    ]); 

    // Assert the file was stored... 
    Storage::disk('avatars')->assertExists('avatar.jpg'); 

    // Assert a file does not exist... 
    Storage::disk('avatars')->assertMissing('missing.jpg'); 
} 
関連する問題