【问题标题】:General error: 1 no such table: users in Laravel Unit Test一般错误:1 没有这样的表:Laravel 单元测试中的用户
【发布时间】:2023-03-09 21:00:01
【问题描述】:

我创建了以下单元测试:

    <?php

    namespace Tests\Unit;

    use Tests\TestCase;
    use App\User;
    use App\Organization;

    class UserTest extends TestCase
    {
        public function testUserHasOwnedOrganization()
        {
            $user = factory(User::class)->create();
            $organization = factory(Organization::class)->create([
                'organizer_id' => $user->id,
            ]);

            $this->assertContains($organization, $user->owned_organizations);
        }
    }

当我运行它时,我得到:

SQLSTATE[HY000]: General error: 1 no such table: users

然而,当我打开php artisan tinker:

>>> factory(App\User::class)->create()
=> App\User {#3048
     name: "Margret Armstrong",
     email: "shanel.cormier@example.net",
     email_verified_at: "2020-05-18 01:22:30",
     updated_at: "2020-05-18 01:22:30",
     created_at: "2020-05-18 01:22:30",
     id: 1,
   }

很明显,工厂工作正常,桌子存在。

这是怎么回事?

谢谢,

【问题讨论】:

  • 您是否检查过用于运行测试的环境?

标签: php laravel phpunit


【解决方案1】:

当您以一种或另一种方式运行测试时,您将需要迁移数据库。

一种常见的方法是利用RefreshDatabase trait。

<?php

namespace Tests\Unit;

use Tests\TestCase;
use App\User;
use App\Organization;
use Illuminate\Foundation\Testing\RefreshDatabase;

class UserTest extends TestCase
{
    use RefreshDatabase;

    public function testUserHasOwnedOrganization()
    {
        $user = factory(User::class)->create();
        $organization = factory(Organization::class)->create([
            'organizer_id' => $user->id,
        ]);

        $this->assertContains($organization, $user->owned_organizations);
    }
}

看看这对你有没有帮助。

您可以在此处找到有关它的更多信息: https://laravel.com/docs/7.x/database-testing

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2018-10-29
    • 2022-10-23
    • 1970-01-01
    • 2012-06-13
    • 2017-08-16
    • 2018-08-11
    • 2015-04-10
    • 2014-12-22
    相关资源
    最近更新 更多