繁体   English   中英

使用Mockery模拟Laravel Model :: increment()

[英]Mocking Laravel Model::increment() with Mockery

我在Laravel 5事件处理程序中有一行代码,如下所示:

$this->event->batch->increment('attempted_jobs');

$this->event是调用处理程序的事件, $this->event->batch包含我的Batch模型。 所有这些都会增加我的数据库中的attempted_jobs列,所以这是相当基本的东西。

我希望能够测试这个事件处理程序,我正在使用Codeception和Mockery。 我对$this->event->batch模拟看起来像这样:

$batch = m::mock('MyVendor\MyApp\Batch');
$batch->shouldReceive('increment')->once()->with('attempted_jobs');

然而,这会导致问题 - increment()Model的受保护方法,因此无法进行Model 这是确切的错误:

InvalidArgumentException: increment() cannot be mocked as it a protected method and mocking protected methods is not allowed for this mock

它似乎是使用__call() PHP魔术方法实现的,那么如何模拟这个呢? 我试图创建一个__call()模拟,但这会产生大量与increment()方法无关的错误。

问题是因为,如上所述, increment()Illuminate\\Database\\Eloquent\\Model()的受保护方法。 解决这个问题的方法是直接模拟__call()方法,如下所示:

$batch = m::mock('MyVendor\MyApp\Batch');
$batch->shouldReceive('__call')->with('increment')->once();

(我不知道为什么当我第一次尝试时这不起作用)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM