Php 测试中的Laraver雄辩列表法

Php 测试中的Laraver雄辩列表法,php,testing,laravel,eloquent,Php,Testing,Laravel,Eloquent,目标是将雄辩的结果列表转换为标记 我是这样做的: 类TransactionPurposeRepository 在控制器中,我有: $purposes = $this->_transactionPurposeRepo->all(); print_r($purposes->lists('id')); die(); 在浏览器中单击“确定”: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5]

目标是将雄辩的结果列表转换为标记

我是这样做的:

类TransactionPurposeRepository

在控制器中,我有:

$purposes = $this->_transactionPurposeRepo->all();
print_r($purposes->lists('id')); die();
在浏览器中单击“确定”:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )
控制台内测试:

PHPUnit 4.3.4 by Sebastian Bergmann.

Configuration read from /Users/yuriikrevnyi/sites/zp.dev/www/phpunit.xml

.......................................PHP Fatal error:  Call to a member function lists() on a non-object in /Users/yuriikrevnyi/sites/zp.dev/www/app/zp/controllers/TransactionsController.php on line 79

Fatal error: Call to a member function lists() on a non-object in /Users/yuriikrevnyi/sites/zp.dev/www/app/zp/controllers/TransactionsController.php on line 79
这里的关键行是对非对象上的成员函数列表的调用


问题是:到底发生了什么事?

我将测试修改为:

$purposes = new Collection([new TransactionPurpose, new TransactionPurpose]);

$this->_repo
    ->shouldReceive('all')->once()->andReturn(Mockery::mock([
        'all' => $purposes,
        'lists' => $purposes->toArray()
    ]));

我想我们要问你的问题是。。。TransactionPurpose->all返回什么?您是否在测试中对->all的调用做出预期,而没有指定可以接收->list的返回值?TransactionPurpose是一个简单的雄辩模型,您是否在测试中模拟它,然后对all方法设置预期?如果是这样,您是否指定它应该返回一个Lightning\Database\Eloquent\Collection的实例,或者至少返回一些需要列表的模拟对象?它终于对我起作用了!谢谢
$purposes = new Collection([new TransactionPurpose, new TransactionPurpose]);

$this->_repo
    ->shouldReceive('all')->once()->andReturn(Mockery::mock([
        'all' => $purposes,
        'lists' => $purposes->toArray()
    ]));