繁体   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