如何在Laravel

时间:2015-12-30 10:10:19

标签: php laravel unit-testing laravel-5 mockery

在单元测试方法中,我试图像这样模拟Cache::remember响应:

Cache::shouldReceive('remember')
    ->once()
    ->with('my_key', 120, function() {}) // There are 3 args in remember method
    ->andReturn([]);

但是我收到了这个错误:

  

异常'Mockery \ Exception \ NoMatchingExpectationException'       消息'找不到匹配的处理程序       Mockery_0_Illuminate_Cache_CacheManager ::记       (“my_key”,120,object(Closure))。这个方法都是       意外或其参数与预期参数不匹配       此方法的列表

我不明白为什么我收到此错误,并且在Laravel文档中没有找到任何关于此的内容。它说没有匹配,但似乎匹配。

如何模拟Cache::remember回复?

2 个答案:

答案 0 :(得分:5)

with方法的第三个参数替换为\Closure::class以匹配任何闭包。

Cache::shouldReceive('remember')
    ->once()
    ->with('my_key', 120, \Closure::class)
    ->andReturn([]);

答案 1 :(得分:-1)

请参阅此问题,了解模拟缓存外观的挑战 -

https://github.com/laravel/framework/issues/10803

也参考

https://github.com/laravel/framework/issues/9729