簡體   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