簡體   English   中英

在 Laravel Phpunit 下,調用 Guzzle Promise 中的 Illuminate config() helper 時拋出 BindingResolutionException

[英]Under Laravel Phpunit, BindingResolutionException is thrown when calling Illuminate config() helper inside Guzzle Promise

在控制器內調用 Guzzle Promise 下的全局輔助函數 config() 時,我收到了 BindingResolutionException()。

運行 phpunit 時,似乎 Illuminate helpers.php 沒有加載到 Guzzle Promise 下。 這是一個錯誤還是我濫用了某些東西?

以下是我的代碼。 (這是一個新的 Laravel 項目)

腳本

./vendor/phpunit/phpunit/phpunit tests/MyTest.php

例外

Illuminate\Contracts\Container\BindingResolutionException {#448
  #message: "Target class [config] does not exist."
  #code: 0
  #file: "./vendor/laravel/framework/src/Illuminate/Container/Container.php"
  #line: 809
  -previous: ReflectionException {#540
    #message: "Class config does not exist"
    #code: -1
    #file: "./vendor/laravel/framework/src/Illuminate/Container/Container.php"
    #line: 807
    trace: {
      ./vendor/laravel/framework/src/Illuminate/Container/Container.php:807 { …}
      ./vendor/laravel/framework/src/Illuminate/Container/Container.php:685 { …}
      ./vendor/laravel/framework/src/Illuminate/Foundation/Application.php:794 { …}
      ./vendor/laravel/framework/src/Illuminate/Container/Container.php:633 { …}
      ./vendor/laravel/framework/src/Illuminate/Foundation/Application.php:779 { …}
      ./vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:119 { …}
      ./vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:275 { …}
      ./app/Http/Controllers/Controller.php:22 {
        App\Http\Controllers\Controller->App\Http\Controllers\{closure}
        › try {
        ›     dump(config('app.env'));
        › } catch (\Exception $e) {
        arguments: {
          $key: "app.env"
        }
      }
      ./vendor/guzzlehttp/promises/src/FulfilledPromise.php:39 { …}
      ./vendor/guzzlehttp/promises/src/TaskQueue.php:47 { …}
      ./vendor/guzzlehttp/promises/src/TaskQueue.php:26 { …}
      GuzzleHttp\Promise\TaskQueue->GuzzleHttp\Promise\{closure}() {}
    }
  }
  trace: {
    ./vendor/laravel/framework/src/Illuminate/Container/Container.php:809 { …}
    ./vendor/laravel/framework/src/Illuminate/Container/Container.php:685 { …}
    ./vendor/laravel/framework/src/Illuminate/Foundation/Application.php:794 { …}
    ./vendor/laravel/framework/src/Illuminate/Container/Container.php:633 { …}
    ./vendor/laravel/framework/src/Illuminate/Foundation/Application.php:779 { …}
    ./vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:119 { …}
    ./vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:275 { …}
    ./app/Http/Controllers/Controller.php:22 {
      App\Http\Controllers\Controller->App\Http\Controllers\{closure}
      › try {
      ›     dump(config('app.env'));
      › } catch (\Exception $e) {
      arguments: {
        $key: "app.env"
      }
    }
    ./vendor/guzzlehttp/promises/src/FulfilledPromise.php:39 { …}
    ./vendor/guzzlehttp/promises/src/TaskQueue.php:47 { …}
    ./vendor/guzzlehttp/promises/src/TaskQueue.php:26 { …}
    GuzzleHttp\Promise\TaskQueue->GuzzleHttp\Promise\{closure}() {}
  }
}

控制器

...
    public function index()
    {
        dump(config('app.env'));

        $promise = new FulfilledPromise(null);
        $promise->then(function () {
            try {
                dump(config('app.env'));
            } catch (\Exception $e) {
                dump($e);
            }
        });
        return response('ok', 200);
    }
...

測試

...
    public function testExample()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
...

作曲家.json

...
    "require": {
        "php": "^7.2.5",
        "fideloper/proxy": "^4.2",
        "fruitcake/laravel-cors": "^1.0",
        "guzzlehttp/guzzle": "^6.3",
        "laravel/framework": "^7.0",
        "laravel/tinker": "^2.0"
    },
    "require-dev": {
        "facade/ignition": "^2.0",
        "fzaninotto/faker": "^1.9.1",
        "mockery/mockery": "^1.3.1",
        "nunomaduro/collision": "^4.1",
        "phpunit/phpunit": "^8.5"
    },
...
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },

網頁.php

...
Route::get('/', 'Controller@index');

我最近遇到了這個問題,這是由於權限問題。 phpunit 需要在 .phpunit.result.cache 上寫權限(至少)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM