我最近发现了一个可排队的作业,该作业批量生成页面的PDF版本失败了,但是(通过浏览器)单独调用有问题的PDF版本并没有失败,因此我们的测试管道通过了。
经过调查,我们发现这是由刀片模板引用Auth :: user()上的方法引起的,因为当通过浏览器通过根调用时,Auth :: user()可作为User的合法实例使用模型。但是,当队列由Daemon运行时,Auth :: user()为 null ,因此刀片未渲染。几个月以来,这种情况并未引起注意,因为我们认为,只需以用户身份登录并分别加载PDF版本,我们的测试范围就足够了。
修复很容易。我刚刚添加了对Auth :: user()不为null的检查,然后再引用它。但是,在Blade中引用Auth :: user()是一种完全正常的做法,将来可能会添加更多。
我该如何编写重新创建/模拟Daemon所调用代码的条件的测试范围?我不在乎Behat还是PHPUnit。
我曾尝试这样称呼Artisan ...
Artisan::call('queue:work', [
'--tries' => 1,
'--timeout' => 4,
'--once'
]);
...但是它永远挂着!
我还尝试鞭打Queueable Job的实例并调用handle()方法,但它总是成功的,即使我引入的中断代码在通过CLI运行队列时也会失败。
$user = User::find(26); // Our test user
$portfolio = $user->portfolios()->first();
$generatePortfolio = new GeneratePortfolio($learnerPortfolio);
$success = $generateLearnerPortfolio->handle();
return [
'success' => $success
];
是否可以通过某种方式模拟QueueWorker如何调用作业并可靠地获取结果?