在Laravel Phpunit下,在Guzzle Promise内部调用Illuminate config()help



在控制器内调用Guzzle Promise下的全局辅助函数config((时,我收到了BindingResolutionException((。

运行phpunit时,Illuminate helpers.php似乎没有在Guzzle Promise下加载。是bug还是我滥用了什么?

以下是我的代码。(这是一个新的Laravel项目(

脚本

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

异常

IlluminateContractsContainerBindingResolutionException {#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 {
AppHttpControllersController->AppHttpControllers{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 { …}
GuzzleHttpPromiseTaskQueue->GuzzleHttpPromise{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 {
AppHttpControllersController->AppHttpControllers{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 { …}
GuzzleHttpPromiseTaskQueue->GuzzleHttpPromise{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);
}
...

composer.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/"
}
},

web.php

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

我最近遇到了这个问题,原因是权限问题。phpunit需要在.phpunit.result.cache上有写置换(至少(。

最新更新