У меня есть кусок кода, который выполняет следующее: < /p>
Создать строку базы данных (библиотека Spatie Media) < /li>
Создать работу, которая добавляет что -то к столбцу A и спасает объект (также Spatie Media Library) < /li>
добавляет что -то в колонку A и Saves (наш собственный код) < /li> < /li> < /> . /> Это работает нормально при тестировании в прямом эфире. Работа работает после HTTP -запроса, поэтому я на самом деле получаю дополнение от работы в последнее время в DB, мне не волнует заказ. < /P>
Теперь я строю модульный тест. В тесте у меня есть драйвер синхронизации. Таким образом, работа выполняется напрямую, когда она создается. Это отлично подходит для тестирования. < /P>
Проблема состоит в том, что когда последний кусок кода добавляет что -то в столбец, он не выполняет обновление () на объекте и не видит изменения, внесенного в задание. Я не хочу менять свой основной код, чтобы сделать обновление, так как это только для модульного теста. Что я могу сделать, чтобы код работал из модульного теста? Для СМИ SPATIE. Он хранится как JSON в базе данных, поэтому, когда я выполняю второй вызов после работы, он в настоящее время перезаписывает (и, таким образом, забывает) задание.\Config::set('queue.default', 'sync');
$user = new User();
$user->fill(['name' => 'username', 'email'=>'email'.rand(0,99999), 'password'=>'password'])->save();
dump($user->name); // username
class MyJob implements ShouldQueue
{
use Queueable;
public function __construct(public User $user){}
public function handle() {
$this->user->name = $this->user->name . " additionFromJob";
$this->user->save();
dump($this->user->name); // username additionFromJob
}
}
MyJob::dispatch($user);
$user->name = $user->name . " someOtherAddition";
$user->save();
dump($user->name);
//expected: username additionFromJob someOtherAddition
//actual: username someOtherAddition
Подробнее здесь: https://stackoverflow.com/questions/796 ... h-database