laravel 无法将类型为Illuminate\Support\Facades\Config的对象用作.../framework/src/Illuminate/Database/DatabaseManager.php中的数组

umuewwlo  于 2022-11-26  发布在  PHP
关注(0)|答案(5)|浏览(120)

我在Laravel中创建了一个简单的UserRepository类,它将处理所有CRUD功能。
一切都运行正常,但是当我试图用phpunit对它进行单元测试时,它就完全崩溃了。
我正在运行Laravel的最新开发版本,我知道这不是一个稳定的版本,但我不知道这是一个laravel错误还是我做错了什么。
当运行phpunit时,我得到this huge error output.
我上的课是

模范角色

namespace Shazzam\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model {

    protected $fillable = ['name'];
}

角色存储库

namespace Shazzam\Repositories;

use \Shazzam\Models\Role;

class RoleRepository
{

    /**
     * @param array $args
     * @return bool
     */
    public function create($args)
    {
        $role = new Role($args);

        return $role->save();
    }
}

角色存储库测试

use Shazzam\Repositories\RoleRepository;

class RoleRepositoryTest extends TestCase
{
    public $repo;

    public function setUp()
    {
        $this->repo = new RoleRepository;
    }

    public function test_it_creates_a_new_role()
    {
        $role['name'] = "NewRole";

        $this->assertTrue($this->repo->create($role));
    }
}

如果你发现我做错了什么,请告诉我。我真的很想继续开发Laravel的开发版本。谢谢。
编辑1-删除了RoleRepository创建方法中的数组类型提示。

mxg2im7a

mxg2im7a1#

您应该呼叫基底类别setUp方法:

public function setUp() {
    parent::setUp();
41zrol4v

41zrol4v2#

对我来说,它的工作原理如下:

public function setUp() {
        parent::setUp();

        // Create DB in memory!
        Artisan::call('migrate');
        DB::beginTransaction();

        Session::start();

        factory('App\Models\User')->create();        
    }

重要提示:parent::tearDown() 在我的例子中必须低于 DB::rollBack(),否则它无法工作!

public function tearDown() {

            DB::rollBack();
            parent::tearDown();
    }
qzlgjiam

qzlgjiam3#

RoleRepository::create()传递的是Illuminate\Support\Facades\Config对象,而不是array对象。删除签名中array的类型提示,它应该会运行。

neskvpey

neskvpey4#

我遇到这个问题是因为我的测试文件是扩展PHPUnit\Framework\TestCase的,所以我把它改为扩展Tests\TestCase

hec6srdp

hec6srdp5#

还有一个例子:
不要访问服务__destruct方法中的应用程序,因为在析构服务时应用程序可能已经终止

相关问题