【问题标题】:After Laravel 6 upgrade unit tests become unstableLaravel 6 升级后单元测试变得不稳定
【发布时间】:2021-09-28 17:44:10
【问题描述】:

我将 Laravel 从 5.8 升级到 6.0。我使用 Composer 2 并直接使用 php vendor/bin/phpunit 在 docker 容器中运行单元测试(没关系)。 PHPunit 版本是 7.5.20。 PHP版本是7.3。 所有具有关系实体的单元测试都是不稳定的,这意味着它可能会在没有任何更改的情况下通过。 代码如下所示:

$book = factory(Book::class)->create([
    'title' => 'test'
]);

我也尝试在代码中直接创建相关记录:

$author = factory(Author::class)->create([])

$book = factory(Book::class)->create([
    'title' => 'test',
    'author' => $author->getKey()
]);

但这并不重要。测试随机失败。而且每次要么不同,要么不一样。

【问题讨论】:

  • 失败,出现什么错误?
  • 你的测试是什么样的,你得到了什么错误?
  • 它失败了,因为 Illuminate\Database\Eloquent\Concerns\HasAttributes 中的方法 getRelationValue($key); 返回 null,而我的代码需要一些实体。我在那个 null 上调用了一些方法,但它失败了。
  • 当您遇到这些(随机)失败时,哪条消息会给 phpunit 测试运行程序?它总是相同的信息吗?你以前的 Phpunit 版本是什么?当您使用 Phpunit 7.5.20 运行未升级的代码时,您会看到相同的行为吗?
  • 该错误实际上是 PHP 错误。如果您正在寻找调试帮助,我建议您在 Stackoverflow 上参考以下 PHP 调试参考:Reference - What does this error mean in PHP?。您可能希望将实际的错误消息编辑到问题中并与它分享您对它的理解(然后可能会跟进您迄今为止尝试处理的内容)。

标签: php laravel phpunit factory laravel-6


【解决方案1】:

我发现了问题。这是性能升级 - https://laravel.com/docs/6.x/upgrade#eloquent-primary-key-type 对于我设置的每个具有字符串主键的实体

/**
 * The "type" of the primary key ID.
 *
 * @var string
 */
protected $keyType = 'string';

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2018-12-30
    • 2021-08-19
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多