вот если assertDispatched вызывать два раза подряд для одной и той же джобы, это два ассерта (для двух диспатчей) или один? Там счетчик ассертов внутри есть? Я бы сделал assertDispatched(MyJob::class)->atLeast(2), но в Bus::fake() это не предусмотрено, почему-то.
Имхо проверять пуш джобов проще через Queue::fake() и Queue:: assertPushed() В assertPushed есть 2й аргумент, отвечающий за количество https://laravel.com/docs/9.x/mocking#queue-fake
Наверно тогда лучше Artisan::fake() /spy() и сами команды отдельно тестить
У меня все сложно - есть пакет джобов, некоторые из которых используют уже работающие команды (чтобы не дубилровать код для получения данных), а потом диспатчат другие джобы в зависимости от настроек и полученных результатов. В итоге для теста такой джобы надо замокать и Artisan (и через spy оно тоже не срабатывало! А вот через Artisan::shouldReceive - почему-то норм), и Bus/Queue. Вчера целый день убил на танцы с бубном вокруг этих фейков, подбирая нужные комбинации для каждого случая. В итоге, проверить, что джоба диспатчится получилось, но, например, что ShouldBeUnique отрабатывает как ожидалось - нет. Все на свете проклял. Документация явно что-то недоговаривает на счет моков...
Да там все просто, тесты выполняются синхронно в одном процессе. Я бы код проверил, либо тестовые данные. Может из-за условий по времени (carbon::now()) такие проблемы хз
Обсуждают сегодня