我正在更新我们的代码库以使用Laravel 5.2,其中包括一堆使用代码的单元测试。最初,代码是使用普通的Doctrine2编写的,我更新后使用LaravelDoctrine。随着这种变化,需要更新测试以使用代码Laravel5模块。
现在,测试最初都是这样编写的
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]);
}
他们的工作和everything is awesome。
一旦我更新使用Laravel5模块,$I->seeInRepository(...
文件中的代码不会生成AcceptanceTesterActions.php
,所以我不能再使用它了。我尝试了其他几种方法 - canSeeReord
,seeInDatabase
- 但是它们会抛出异常
[RuntimeException] Class SomeObject is not an Eloquent model
我理解,因为SomeObject
实际上不是一个雄辩的模型,但......谁在乎呢?之前的测试工作,使用网站到处工作(LaravelDoctrine的标语是“Laravel 5+的插入式Doctrine2实现”,它很酷)。
我们有大量的模型和一些复杂的结构,当前的模型集完全重写不在范围内......
我查看了Laravel5.php中的模块代码,异常和模块与Eloquent模型非常相似:
/**
* @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();
}
有解决方法吗?