Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Laravel5 Codeception模块不关心我的数据库实体是否是有说服力的模型?_Laravel_Unit Testing_Eloquent_Codeception - Fatal编程技术网

如何使Laravel5 Codeception模块不关心我的数据库实体是否是有说服力的模型?

如何使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');

我正在更新我们的代码库以使用Laravel5.2,其中包括一系列使用codeception的单元测试。最初,代码是使用普通Doctrine2编写的,我将其更新为使用LaravelDoctrine。随着这一变化,需要更新测试以使用codeception 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]);
}
他们工作和工作

一旦我更新为使用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