在 laravel 5.2 单元测试中模拟作业

Posted

技术标签:

【中文标题】在 laravel 5.2 单元测试中模拟作业【英文标题】:Mocking Jobs in laravel 5.2 Unit testing 【发布时间】:2016-05-07 02:51:58 【问题描述】:

我对单元测试很陌生。我被要求在我的应用程序中编写单元测试。在我的应用程序中,我们有控制器和服务。我正在尝试像这样模拟从控制器调用的作业。

$this->expectsJobs(App\Jobs\UploadResponseEmail::class);

这会引发以下错误

production.ERROR: Mockery\Exception\NoMatchingExpectationException: 没有为 Mockery_0_Illuminate_Bus_Dispatcher::dispatch(object(App\Jobs\UploadResponseEmail)) 找到匹配的处理程序。该方法是意外的,或者它的参数与该方法的预期参数列表不匹配

Job 有一个构造函数,它需要一个参数。我认为这会导致错误。我如何在这里传递构造函数参数。有什么想法吗?

【问题讨论】:

【参考方案1】:

如果你使用 lumen,你需要在你的 composer.json 文件中添加 mockery。 Laravel 默认有它,所以你的问题是关于 Lumen 而不是 Laravel

"mockery/mockery": "0.9.*",

即使从 Laravel 5.1 开始,它也存在: https://github.com/laravel/laravel/blob/5.1/composer.json

Lumen 5.2 缺少的地方: https://github.com/laravel/lumen/blob/v5.2.1/composer.json

【讨论】:

以上是关于在 laravel 5.2 单元测试中模拟作业的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring 在单元测试中模拟远程 REST API?

Spring Batch -单元测试

如何在 Spring Security Bean 中模拟自定义 UserService 详细信息以进行单元测试?

如何使用 grails 在单元测试中模拟 springSecurityService

测试单元 Spring boot:无法注册模拟 bean

如何在 Spring Boot REST API 中为 db insert 方法编写模拟单元测试?