【问题标题】:Unable to locate factory in Laravel 7无法在 Laravel 7 中找到工厂
【发布时间】:2020-11-01 04:14:55
【问题描述】:

我正在为 PHPunit 进行单元测试。代码是:

<?php

namespace Tests\Unit;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use PHPUnit\Framework\TestCase;

class ThreadTest extends TestCase
{
    use DatabaseMigrations;



    public function test_a_thread_has_replies()
    {

        $thread = factory('App\Thread')->create();

        $this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $thread->replies);
    }
}

当我运行 PHPUnit 时出现错误:

InvalidArgumentException:无法找到 [App\Thread] 的工厂。

我有一个线程工厂:

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Thread;
use Faker\Generator as Faker;

$factory->define(Thread::class, function (Faker $faker) {
    return [
        'user_id' => factory(App\User::class),
        'title' => $faker->sentence,
        'body' => $faker->paragraph
    ];
});

如果我在 Tinker 中使用工厂,它可以正常工作。

我对其他类有类似的测试函数和工厂,这些都可以正常工作。

很可能我犯了一个非常愚蠢的错误,但我找不到它。

有什么建议吗?

亲切的问候,

胡贝特

【问题讨论】:

    标签: laravel phpunit


    【解决方案1】:

    您正在扩展 php 单元测试用例类。这不会加载您的 Laravel 应用程序。你应该扩展 Laravel 提供的 Tests\TestCase 的使用。

    在 CLI 上使用 php artisan make:test UserTest 将使用正确的模板创建一个测试,以测试 Laravel 应用程序。

    【讨论】:

    • 感谢您的回复。做到了,但没有任何改变。 Laravel 发行版中包含的 ExampleTest.php 也与我的测试完全相同。所以问题肯定是另一个问题。
    • 我折腾了一下,最后按照你建议的方式解决了。
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2018-02-14
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2020-12-28
    • 2020-02-26
    • 2016-07-25
    相关资源
    最近更新 更多