php - Laravel:用于文件上传测试的 Laravel 存储外观上的未定义方法伪造

标签 php laravel testing tdd laravel-5.4

我开始通过在 Laravel 的 HTTP 测试中进行实验来学习 TDD。这是我的测试函数:

public function testLoginUsingUserDeni() {
    $response = $this->json('POST', '/api/v1/login', [
            'email' => 'ramadhanrperdana@gmail.com',
            '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的方法。我已经在 vendor 目录中进行了一些搜索,以找到 Storage facades 周围的任何 fake 方法,但我找不到它。我正在使用 Laravel 5.4。我错过了什么吗?

最佳答案

[已解决] 我检查了 laravel 的 Github repository并意识到几天前为 Storage Facade 添加了 fake 方法。完成 composer update 后,我的问题就解决了。 今天的教训是不要忽视像 composer 这样强大的工具,并确保更新我们的项目依赖项以确保我们也可以执行最新的功能。

关于php - Laravel:用于文件上传测试的 Laravel 存储外观上的未定义方法伪造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792457/

相关文章:

mysql - Laravel 查询生成器联合 : Add 'table name' column

php - MySQL 中的 Unicode 字符(表情符号)显示为 "????"

macos - 在Mac上设置Cucumber Testing Framework(对象true没有方法'getTitle')

testing - 如何在 Karate DSL 中操作 xml 文件的变量?

php - Wordpress Customizer (functions.php) - 网站崩溃 (500)

php - 获取 curl_error() : 2 is not a valid cURL handle resource while fetching all users from freshdesk api

mysql - 连接表的总金额不正确

java - 在构建过程中集成系统测试

PHP 更新用户设置

php - 哪些技术是在线实时聊天应用程序的最佳选择?