我在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方法中删除了数组类型提示。更新标题
答案 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
。我的测试又开始正常运行。