#laravel #laravel-8
#laravel #laravel-8
Вопрос:
Я пытаюсь имитировать ShouldBroadcast
событие, но иногда тест завершается неудачно, а иногда и успешно. Чтобы быть точным, у меня есть функции тестирования дерева с приведенным ниже кодом, которые случайным образом завершатся неудачей или успехом. Есть какие-нибудь идеи, в чем причина?
Это событие
class MessageDeleted implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var User
*/
public User $user;
/**
* @var Message
*/
public Message $message;
/**
* Create a new event instance.
*
* @param User $user
* @param Message $message
*/
public function __construct(User $user, Message $message)
{
$this->user = $user;
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('App.Models.Conversation.' . $this->message->conversation_id);
}
}
Это событие срабатывает в контроллере
broadcast(new MessageDeleted($user, $message))->toOthers();
И это тест
public function testItCanDeleteMessage()
{
$initialEvent = Event::getFacadeRoot();
Event::fake();
Model::setEventDispatcher($initialEvent);
$user = User::factory()->create();
$conversation = Conversation::factory()->create();
$message = Message::factory()->create();
$response = $this->actingAs($user)->deleteJson('/conversations/' . $conversation->id . '/messages/' . $message->id);
Event::assertDispatched(function (MessageDeleted $event) use ($user, $message) {
return $event->message->conversation_id === $message->conversation_id;
});
Event::assertDispatched(MessageDeleted::class, 1);
$response->assertStatus(JsonResponse::HTTP_OK);
$response->assertJsonStructure([
'message',
]);
}
Комментарии:
1. Какая часть терпит неудачу? Может быть, сбой происходит где-то еще в вашем коде? У меня были ситуации, когда тесты «иногда» завершались неудачно, когда были задействованы временные метки, и тест только что прошел второй, после чего некоторые функции начали сбоить.
2. Иногда я получаю
Failed asserting that event 'AppEventsMessageUpdated' was broadcast on channel s 'private-App.Models.Conversation.18' 0 events was broadcast: [] Failed asserting that false is true.
3. Извините, но ваш вопрос похож на то, что вы показываете мне закрытую сумку и просите меня сказать, что внутри. Вам нужно будет показать больше кода, что происходит за кулисами. Проанализируйте это, используйте отладчик, запишите все. И т.д.
4. Я обновил вопрос
5. Что происходит, когда вы делаете
event(new MessageDeleted(....
вместоbroadcast