     end
   end
 
-  describe "handle_event/3, with a Task" do
-    setup do
-      parent = self()
-
-      spawn(fn ->
-        %Task{pid: pid} =
-          Task.async(fn ->
-            raise "Exception"
-          end)
-
-        send(parent, pid)
-      end)
-
-      pid =
-        receive do
-          pid -> pid
-        end
-
-      [pid: pid]
-    end
-
-    test "creates a span", %{pid: pid} do
-      until(fn ->
-        assert {:ok, [{"background_job", nil, [pid: ^pid]}]} = Test.Tracer.get(:create_span)
-      end)
-    end
-
-    test "adds an error to the created span", %{pid: pid} do
-      until(fn ->
-        assert {:ok, [{%Span{pid: ^pid}, :error, %RuntimeError{message: "Exception"}, stack} | _]} =
-                 Test.Span.get(:add_error)
-
-        assert is_list(stack)
-      end)
-    end
-
-    test "closes the created span", %{pid: pid} do
-      until(fn ->
-        assert {:ok, [{%Span{pid: ^pid}} | _]} = Test.Tracer.get(:close_span)
-      end)
-    end
-  end
-
-  describe "handle_event/3, with a crashing GenServer" do
-    setup do
-      {:ok, pid} = start_supervised(CrashingGenServer)
-
-      GenServer.cast(pid, :raise_error)
-
-      [pid: pid]
+  describe "handle_event/3, with a KeyError" do
+    setup %{pid: pid} do
+      Murphy.call(pid, fn ->
+        _ = Map.fetch!(%{}, :bad_key)
+      end)
+
+      :ok
     end
 
     test "creates a span", %{pid: pid} do

  end

  describe "handle_event/3, with an ignored process" do
    setup do
      [
        pid:
          spawn(fn ->
            Tracer.ignore()
            raise "Exception"
          end)
      ]
    end

    test "does not create a span", %{pid: pid} do
      repeatedly(fn ->
        assert Test.Tracer.get(:create_span) == :error
      end)

  end

  describe "handle_event/3, with a :badarg" do
    setup %{pid: pid} do
      Murphy.call(pid, fn ->
        :erlang.error(:badarg)
      end)

      :ok
    end

    test "creates a span", %{pid: pid} do
