如果我的数据库实体是Eloquent模型,我如何使Laravel5 Codeception模块无关紧要?

时间:2017-02-27 17:05:43

标签: laravel unit-testing eloquent codeception

我正在更新我们的代码库以使用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,所以我不能再使用它了。我尝试了其他几种方法 - canSeeReordseeInDatabase - 但是它们会抛出异常

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

有解决方法吗?

0 个答案:

没有答案