【问题标题】:ReflectionException : Class env does not exist. Am I doing something wrong?ReflectionException : 类 env 不存在。难道我做错了什么?
【发布时间】:2019-08-16 18:01:54
【问题描述】:

我目前正在尝试设置 phpunit 测试来测试我的 API。问题是我无法在没有问题的情况下两次发送完全相同的请求。

我已尝试更改 phpunit.xml 以查看是否存在问题但没有成功,所以我现在怀疑自己认为我在代码本身中做错了什么。

public function test_can_register_user() {
        $this->consoleLog('test_can_register_user');
        $generatedUser = str_random(5) . '@example.com';

        $data = [
            'name' => 'Test User',
            'email' => $generatedUser,
            'password' => 'test',
        ];

        var_dump($data);

        $expect = [
            'success' => true,
            'message' => 'Thanks for signing up! Please check your email to complete your registration.',
        ];

       $request = $this->post('/api/auth/register', $data)
            ->assertStatus(200)
            ->assertJson($expect);

       return $generatedUser;
    }

    /**
     * @depends test_can_register_user
     * @param $generatedUser
     */
    public function test_can_not_register_same_email($generatedUser) {
        $this->consoleLog('test_can_not_register_same_email');

        $data = [
            'name' => 'Test User',
            'email' => $generatedUser,
            'password' => 'test',
        ];

        var_dump($data);

        $expect = [
            'success' => false,
            "error" => [
                "email" => [
                "The email has already been taken."
                ]
            ]
            ];

       $request = $this->post('/api/auth/register', $data);
       var_dump($request->json());
       $request->assertStatus(200);
    }
     <php>
        <env name="DB_CONNECTION" value="mysql"/>
        <env name="APP_DEBUG" value="false"/>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="MAIL_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>

预期结果是返回状态 200。控制台中的实际结果如下:

Running test:
test_can_not_register_same_email
array(3) {
  ["name"]=>
  string(9) "Test User"
  ["email"]=>
  string(17) "C4v67@example.com"
  ["password"]=>
  string(4) "test"
}

ReflectionException : Class env does not exist
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:779
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:658
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:609
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:759
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:1222
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:519
 D:\Yeagger\yeagger-api\app\Providers\TelescopeServiceProvider.php:24
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Support\HigherOrderCollectionProxy.php:60
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Support\HigherOrderCollectionProxy.php:60
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Support\Collection.php:455
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Support\HigherOrderCollectionProxy.php:61
 D:\Yeagger\yeagger-api\vendor\laravel\telescope\src\Telescope.php:263
 D:\Yeagger\yeagger-api\vendor\laravel\telescope\src\Telescope.php:222
 D:\Yeagger\yeagger-api\vendor\laravel\telescope\src\Telescope.php:270
 D:\Yeagger\yeagger-api\vendor\laravel\telescope\src\Telescope.php:294
 D:\Yeagger\yeagger-api\vendor\laravel\telescope\src\Watchers\CacheWatcher.php:45
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Events\Dispatcher.php:360
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Events\Dispatcher.php:209
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Cache\Repository.php:497
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Cache\Repository.php:107
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Cache\RateLimiter.php:82
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Cache\RateLimiter.php:39
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php:52
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Router.php:684
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Router.php:659
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Router.php:625
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Router.php:614
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:176
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:30
 D:\Yeagger\yeagger-api\vendor\barryvdh\laravel-cors\src\HandleCors.php:36
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\fideloper\proxy\src\TrustProxies.php:57
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:31
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:31
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php:27
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php:62
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:151
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:116
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:345
 D:\Yeagger\yeagger-api\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:195
 D:\Yeagger\yeagger-api\tests\Unit\UserTest.php:67

【问题讨论】:

  • 由于某种原因在 app.php 中注释 App\Providers\TelescopeServiceProvider::class 可以解决问题。
  • 以前发生过类似的事情,我相信问题出在配置和引导缓存中,因为这是在事件中调用的东西,所以我运行了正常的 composer dumpautoload 和 php artisan config:clear / php artisan config:cache 它修复了一切。
  • 谢谢你的回答,我一定会试试的。

标签: laravel phpunit


【解决方案1】:

dd($exception); 放入App\Exceptions\Handler::report() 它给你一个更好的错误信息。 filesystem 我的配置有错误!

【讨论】:

  • 这对我有用。否则不会显示真正的错误。我也遇到了配置错误。
  • 除非您的堆栈跟踪另有说明,否则您会在大约第 220 行查找 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.phpdd($e);
【解决方案2】:

我通过这些命令解决了这个问题:

php artisan clear
php artisan config:clear

【讨论】:

  • 谢谢!在我找到您的答案之前,我的开发团队中的六个人花了一个小时试图找到解决此问题的方法。 php artisan clear 正是我们需要的答案。我在配置文件中使用 env('APP_ENV') ,它在编写时工作,但在更新后没有。有趣的是,app()->environment() 一直在尝试,直到我进行了 artisan optimize 或 artisan config:clear,然后我收到一条消息,提示 env 类不存在。我会对解释非常感兴趣。有人想展示他们有多聪明吗?
【解决方案3】:

对我来说,设置 PHPUnit 后它得到了修复

        <env name="TELESCOPE_ENABLED" value="false"/>

【讨论】:

  • 你把这个放在哪一行
【解决方案4】:

我通过更新作曲家解决了同样的问题

composer update

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多