我在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
方法,因为当服务正在破坏时,应用程序可能已经终止