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

时间:2014-12-21 15:29:57

标签: laravel phpunit

我在Laravel中创建了一个简单的User Repository类,它将处理所有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();
    }
}

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));
    }
}

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

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

4 个答案:

答案 0 :(得分:5)

您应该调用基类setUp方法:

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

答案 1 :(得分:5)

对我而言,它的作用如下:

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();
    }

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我遇到此问题是因为我的测试文件正在扩展PHPUnit\Framework\TestCase,所以我将其更改为扩展了Tests\TestCase。我的测试又开始正常运行。