如何使Laravel5 Codeception模块不关心我的数据库实体是否是有说服力的模型?
我正在更新我们的代码库以使用Laravel5.2,其中包括一系列使用codeception的单元测试。最初,代码是使用普通Doctrine2编写的,我将其更新为使用LaravelDoctrine。随着这一变化,需要更新测试以使用codeception Laravel5模块 现在,测试最初是这样编写的如何使Laravel5 Codeception模块不关心我的数据库实体是否是有说服力的模型?,laravel,unit-testing,eloquent,codeception,Laravel,Unit Testing,Eloquent,Codeception,我正在更新我们的代码库以使用Laravel5.2,其中包括一系列使用codeception的单元测试。最初,代码是使用普通Doctrine2编写的,我将其更新为使用LaravelDoctrine。随着这一变化,需要更新测试以使用codeception Laravel5模块 现在,测试最初是这样编写的 public function someTest(SomeTestObject $I) { $I->wantTo('Some test objective');
public function someTest(SomeTestObject $I) {
$I->wantTo('Some test objective');
$I->amOnPage('/some/page.php?parameter=678');
$I->waitForText('Text');
$I->click('Somelink');
$I->seeInRepository('My/Models/SomeObject', ['columnName' => 678]);
}
他们工作和工作
一旦我更新为使用Laravel5模块,$I->seeInRepository(…
不是由AcceptanceTesterActions.php
文件中的codeception生成的,所以我不能再使用它了。我尝试了其他两种方法--可以seereord
,seeInDatabase
--但是它们抛出了异常
[RuntimeException] Class SomeObject is not an Eloquent model
我理解这一点,因为SomeObject
实际上并不是一个雄辩的模型,但…谁在乎呢?测试以前是有效的,使用网站在任何地方都有效(LaravelDoctrine的口号是“Laravel5+的Doctrine2实现中的一个下降”,这有点酷)
我们有大量的模型和当前模型集的一些复杂结构,完全重写根本不在范围之内
我查看了Laravel5.php中的模块代码,异常和模块看起来与雄辩的模型非常耦合:
/**
* @param string $modelClass
*
* @return EloquentModel
*/
protected function getQueryBuilderFromModel($modelClass)
{
$model = new $modelClass;
if (!$model instanceof EloquentModel) {
throw new \RuntimeException("Class $modelClass is not an Eloquent model");
}
return $model->newQuery();
}
有办法解决这个问题吗?我认为正确的解决方案是将
\u getEntityManager
方法添加到Laravel5模块,并将其与条令模块结合使用。查看Symfony和ZF2模块的实现示例。请向Codeception发出拉取请求。我使用Doctrine2
检查了旧的代码库,其中h从DoctrineProvider
实现\u getEntityManager()
…从未被调用。该调用何时发生?它由Doctrine2模块调用:您还必须设置依赖项:Laravel5
。