2017-03-14 22 views
2

我开始通过在Laravel的HTTP测试中进行实验来学习TDD。这是我的测试功能:Laravel:在Laravel存储外观上进行文件上传测试的未定义方法假冒

public function testLoginUsingUserDeni() { 
    $response = $this->json('POST', '/api/v1/login', [ 
      'email' => '[email protected]', 
      'password' => 'secret' 
     ]); 
    $response 
     ->assertStatus(200) 
     ->assertJSONStructure($this->loginSuccessJsonStructure); 

    return $response->original['token']; 
} 

/** 
* @depends testLoginUsingUserDeni 
*/ 
public function testGambarBaru($token) { 
    Storage::fake('gambar'); 
    $response = $this->json('POST', '/api/gambar/baru', [ 
      'token' => $token, 
      'gambar' => UploadedFile::fake()->image('evidence.jpg'), 
      'posisi' => 1 
     ]); 
    Storage::disk('gambar')->assertExists('evidence.jpg'); 
    $response 
     ->assertStatus(200) 
     ->assertJSONStructure($this->gambarJsonStructure); 
} 

但是,在运行测试我有错误,如在此之后:

PHPUnit 5.7.11 by Sebastian Bergmann and contributors. 

Runtime:  PHP 7.0.13-0ubuntu0.16.04.1 
Configuration: /home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/phpunit.xml 

..E.......................................      42/42 (100%) 

Time: 2.94 seconds, Memory: 20.00MB 

There was 1 error: 

1) Tests\Feature\Api\GambarTest::testGambarBaru 
BadMethodCallException: Call to undefined method League\Flysystem\Filesystem::fake 

/home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/vendor/league/flysystem/src/Plugin/PluggableTrait.php:86 
/home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:475 
/home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php:328 
/home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:221 
/home/kromatin/Projects/PJB REMBANG/web-apps/KawistaK3_web/tests/Feature/Api/GambarTest.php:65 

ERRORS! 
Tests: 42, Assertions: 313, Errors: 1. 
Script phpunit --color=always --verbose handling the test event returned with error code 2 

我执行testGambarBaru功能时遇到错误,而其他功能运作良好。那个错误指向了我放置的地方Storage::fake('gambar');

我的测试功能的目的是确保我的文件上传API工作正常。我遵循Laravel有关测试文件上传的文档:https://laravel.com/docs/5.4/http-tests#testing-file-uploads。但结果表明在Storage Facade中没有称作fake的方法。我已经在供应商目录中进行了一些搜索,以找到围绕存储外观的任何fake方法,但我无法找到它。我正在使用Laravel 5.4。有什么我错过了吗?

+0

你可以包含'use'代码的一部分吗? – apokryfos

+0

我意识到前几天添加了存储外观的“假”方法。在完成'作曲家更新'之后,问题就解决了。我感到愚蠢的是,我忽略了使用像composer haha​​ 这样强大的工具更新我的依赖关系,谢谢你的回复@apokryfos :) –

回答

3

[已解决] 我检查了laravel的Github repository,并意识到fake存储门面的方法前几天加入。做完composer update我的问题解决了。 今天学到的教训是不要忽略像composer这样强大的工具,并确保更新我们的项目依赖关系,以确保我们也可以执行最新功能。