Jam*_*iah 3 php phpunit laravel mockery laravel-6
我有一个 artisan 命令,它触发一个名为PasswordResetJob的作业,该作业在调用存储库类OrgRepository中的ForcePasswordReset方法时进行迭代,该方法更新用户的表。整个过程运行良好。
现在,我尝试编写一个 Laravel 测试来模拟OrgRepository类,并断言强制密码重置方法至少被调用一次,根据我提供给测试的条件,情况应该是这样。在测试中,我调用artisan命令来解雇工作;(我正在使用同步队列进行测试)当作业被调用并且用户的表被更新时,这工作得很好,因为我可以直接查看数据库更新。但是,测试失败并出现错误:Mockery\Exception\InvalidCountException:Mockery_2_Repositories_OrgRepository 中的方法forcePasswordReset() 应该至少调用 1 次,但调用了 0 次。
测试中的工匠调用是:
Artisan::call('shisiah:implement-org-password-reset');
Run Code Online (Sandbox Code Playgroud)
我之前和模拟初始化之后都尝试过进行 artisan 调用,但仍然遇到相同的错误。这是测试中的模拟初始化
$this->spy(OrgRepository::class, function ($mock) {
$mock->shouldHaveReceived('forcePasswordReset');
});
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我已经阅读了文档并通过谷歌搜索了几个小时。如果您需要任何其他信息来帮助,请告诉我。我使用的是Laravel 6.0 版本
我将OrgRepository类传递给作业类的handle方法,如下所示:
public function handle(OrgRepository $repository)
{
//get orgs
$orgs = Org::where('status', true)->get();
foreach ($orgs as $org){
$repository->forcePasswordReset($org);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您在作业运行后初始化您的间谍,这意味着在作业期间它将使用真实的类而不是间谍。
你必须在测试中做这样的事情:
$spy = $this->spy(OrgRepository::class);
// run your job
$spy->shouldHaveReceived('forcePasswordReset');
Run Code Online (Sandbox Code Playgroud)
我们告诉 laravel 使用间谍而不是存储库,运行作业,然后断言该方法已被调用。
Jeffrey Way 在这个截屏视频中对此进行了很好的解释。
| 归档时间: |
|
| 查看次数: |
3939 次 |
| 最近记录: |