在 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 单元测试中模拟作业的主要内容,如果未能解决你的问题,请参考以下文章

在单元测试中模拟时找不到 Laravel 外观类

如果在Laravel 5.5单元测试中隐藏密码,如何模拟用户创建

laravel 单元测试设置模拟时间

laravel 单元测试设置模拟时间

在laravel 5.1单元测试中嘲笑hasMany关系

硒和 Laravel 5.2