diff --git a/t/scripts/hydra-eval-jobset/notifications.t b/t/scripts/hydra-eval-jobset/notifications.t
index 3e914bb0..77cec71b 100644
--- a/t/scripts/hydra-eval-jobset/notifications.t
+++ b/t/scripts/hydra-eval-jobset/notifications.t
@@ -5,6 +5,24 @@ use Setup;
 use Test2::V0;
 use File::Copy;
 use Hydra::PostgresListener;
+use Hydra::Event;
+
+# expectEvent(Hydra::PostgresLister, name of the channel to expect, a sub which gets the parsed event)
+sub expectEvent {
+    my ($listener, $expectedChannel, $then) = @_;
+    my $message = $listener->block_for_messages(0)->();
+
+    my $channel = $message->{"channel"};
+
+    if ($channel eq $expectedChannel) {
+        my $event = Hydra::Event->new_event($message->{"channel"}, $message->{"payload"});
+        local $_ = $event->{event};
+        $then->();
+    } else {
+        is($expectedChannel, $channel, "Expecting a message on channel $channel");
+    }
+}
+
 
 my $ctx = test_context(
     hydra_config => q|
@@ -38,15 +56,11 @@ my $builds = $ctx->makeAndEvaluateJobset(
 );
 my $jobset = $builds->{"stable-job-queued"}->jobset;
 
-my $traceID;
-
 subtest "on the initial evaluation" => sub {
-    my $startedMsg = $listener->block_for_messages(0)->();
-    is($startedMsg->{"channel"}, "eval_started", "every eval starts with a notification");
-
-    my ($traceID, $jobsetID) = split("\t", $startedMsg->{"payload"});
-    isnt($traceID, "", "we got a trace id");
-    is($jobsetID, $jobset->get_column('id'), "the jobset ID matches");
+    expectEvent($listener, "eval_started", sub {
+        isnt($_->{"trace_id"}, "", "We got a trace ID");
+        is($_->{"jobset_id"}, $jobset->get_column('id'), "the jobset ID matches");
+    });
 
     is($listener->block_for_messages(0)->()->{"channel"}, "build_queued", "expect 1/4 builds being queued");
     is($listener->block_for_messages(0)->()->{"channel"}, "build_queued", "expect 2/4 builds being queued");