8

最近将一个 5.3 的项目升级到 5.4,一切看起来都不错。

今天我开始实现 Dusk 但是在运行示例测试时遇到了问题

☁  footy-finance [5.4] ⚡ php artisan dusk
PHPUnit 6.0.0 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 162 ms, Memory: 6.00MB

There was 1 error:

1) Tests\Browser\ExampleTest::testBasicExample
ReflectionException: Class config does not exist

/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Container/Container.php:681
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Container/Container.php:565
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:105
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:263
/Users/owen/Sites/footy-finance/vendor/laravel/dusk/src/TestCase.php:203
/Users/owen/Sites/footy-finance/vendor/laravel/dusk/src/TestCase.php:40

我看过第 40 行TestCase.php及其

public function baseUrl()
{
    return config('app.url');
}

所以它看起来确实与全局config助手有关,有人有什么想法吗?

我在跑

  • PHP 7.0.14
  • Laravel/框架 5.4.8
  • Laravel/黄昏 1.0.5

完整的 composer.lock 可见https://gist.github.com/OwenMelbz/c05172b33f6eb4483e37a56469b53722

手指交叉你们有一些想法!

干杯:)

4

8 回答 8

35

我在日志中有这个错误

Class config does not exist

我的问题是在 .env 文件中我通过以下方式设置了一个配置变量:

APP_NAME=Application Name

注意空间。当我将其更改为:

APP_NAME="Application Name" 

问题得到了解决

于 2017-04-17T06:04:59.020 回答
6

问题在于 .env 文件 App_Name

在原始文件中它是这样写的>>> APP_NAME=Application Name

让它像这样 APP_NAME="应用程序名称"

于 2017-11-20T14:22:39.260 回答
4

就我而言,此解决方案有效:

1)bootstrap/cache删除文件夹 的所有内容
2)运行composer dump命令

于 2020-07-16T13:00:14.683 回答
2

对于遇到此问题的其他任何人。

我更喜欢作曲家文件中的稳定集,它安装了 PHPUnit 6。

这是“今天稳定的” - 因此它是在作曲家更新期间安装的。

降级到 PHPUnit 5 解决了这个问题——今天开始的时机也很糟糕。

于 2017-02-03T14:26:31.970 回答
1

我刚刚遇到了同样的问题,在我的情况下 .env 很干净,没有未包装的空格。

在编写/调试测试用例,使用该setup()测试中的方法,忘记调用parent::setup()该函数中的第一条语句时,也会出现此错误消息。

protected $stuf;

function setup() {
    parent::setup();

    $this->stuf = 'stuf';
}

我在这里找到了非常有用的信息,了解当您收到此错误消息时还会发生什么。

于 2019-09-02T09:43:36.783 回答
1

我在这里参加聚会已经很晚了,但是对于在 Laravel 的单元测试中遇到相同问题并且上述解决方案都不起作用的任何人,您可以查看我的,看看这是否有帮助。

就我而言,我试图调用一个方法,当我运行单元测试时,该方法将删除保留在我的 Redis 数据库中的所有测试密钥。该方法tearDown在类的方法中被调用。tearDown发生错误是因为在执行实际代码之前调用了父构造函数。这就是我遇到错误的原因。

而不是这个……

/**
 * tearDown is executed after test stub
 */
protected function tearDown()
{
    parent::tearDown();

    $this->deleteTestKeys();
}

改成这个。。。

protected function tearDown()
{
    $this->deleteTestKeys();

    parent::tearDown();
}

在这种情况下,“类”还没有完全销毁,Laravel 的config方法将被相应地调用。

于 2021-10-12T05:44:33.360 回答
0

我也遇到过这个问题。对我来说,这是由调用config()dataProvider 方法中的函数引起的。createApplication()在方法初始化应用程序并填充 DI 容器之前调用 DataProviders 。因此config()失败,因为app('config')辅助函数中的调用无法config从容器中解析类。

于 2019-02-19T01:16:32.557 回答
0

我今天在 Lumen 应用程序中有这个。经过一番调查和玩耍,我发现这是因为在 PHPStorm 中它正在将--no-configuration选项添加到phpunit命令中,因为我没有在 IDE 中为项目配置我的 PHPUnit 设置。

我通过单击“运行 > 编辑配置”,然后在“默认值 > PHPUnit ”下单击“使用替代配置文件:”选项最右侧的小按钮并将“默认配置文件:”设置为完整路径来纠正该问题到您的项目的phpunit.xml.

希望这可以帮助!

于 2017-10-26T17:06:34.997 回答