不能在.../framework/src/Illuminate/Database/DatabaseManager.php中使用Illuminate\Support\Facades\Config类型的对象作为数组

Sal*_*ues 1 phpunit laravel

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

一切正常,但是当我尝试使用phpunit进行单元测试时,它们都会分崩离析.

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

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

我的课程是

模范角色

namespace Shazzam\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model {

    protected $fillable = ['name'];
}
Run Code Online (Sandbox Code Playgroud)

角色存储库

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

RoleRepository测试

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你发现我做错了什么,请告诉我.我真的很想继续研究Laravel的开发版本.谢谢.

编辑1-在RoleRepository create方法中删除了数组类型提示.更新标题

Dra*_*anS 5

你应该调用基类setUp方法:

public function setUp() {
    parent::setUp();
Run Code Online (Sandbox Code Playgroud)


Lac*_*eee 5

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

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

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

        Session::start();

        factory('App\Models\User')->create();        
    }
Run Code Online (Sandbox Code Playgroud)

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

  public function tearDown() {

            DB::rollBack();
            parent::tearDown();
    }
Run Code Online (Sandbox Code Playgroud)