不能将类型为 IlluminateSupportFacadesConfig 的对象用作 中的数组./fram



我在Laravel中创建了一个简单的User Repository类,它将处理所有CRUD功能。

一切正常,但是当我尝试用phpunit对其进行单元测试时,一切都崩溃了。

我正在运行 Laravel 的最新开发版本,我知道这不是一个稳定的版本,但我很困惑这是一个 larawel 错误还是我做错了什么。

运行phpunit时,我得到了这个巨大的错误输出。

我的课程是

模范角色

namespace ShazzamModels;
use IlluminateDatabaseEloquentModel;
class Role extends Model {
    protected $fillable = ['name'];
}

角色存储库

namespace ShazzamRepositories;
use ShazzamModelsRole;
class RoleRepository
{
    /**
     * @param array $args
     * @return bool
     */
    public function create($args)
    {
        $role = new Role($args);
        return $role->save();
    }
}

角色存储库测试

use ShazzamRepositoriesRoleRepository;
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-删除了角色存储库创建方法中的数组类型提示。更新的标题

你应该调用基类 setUp 方法:

public function setUp() {
    parent::setUp();
对我来说,

它的工作原理如下:

public function setUp() {
        parent::setUp();
        // Create DB in memory!
        Artisan::call('migrate');
        DB::beginTransaction();
        Session::start();
        factory('AppModelsUser')->create();        
    }

重要提示:在我的情况下,parent::tearDown(( 必须低于 DB::rollBack((,否则它不起作用!

  public function tearDown() {
            DB::rollBack();
            parent::tearDown();
    }

RoleRepository::create(( 正在传递一个IlluminateSupportFacadesConfig对象,而不是一个array。拿走签名中array的类型提示,它应该运行。

我遇到了这个问题,因为我的测试文件正在扩展PHPUnitFrameworkTestCase,所以我将其更改为扩展TestsTestCase。我的测试又开始运行良好。

另一种情况:

不要访问服务中的应用程序__destruct方法,因为当服务正在破坏时,应用程序可能已经终止

最新更新