2

私はGenEventそのようにハンドラとして追加された:error_logger.add_report_handler(HoloNet.ErrorLogger)

エラー/例外がキャプチャされ、例外監視サービスに転送されるようにします。

イベント動作に次のコードがあります

defmodule MyApp.ErrorLogger do
  use GenEvent

  @bugsnag_client Application.get_env(:my_app, :bugsnag_client)

  def init(_opts), do: {:ok, self}

  def handle_event({:error_report, _gl, {_pid, _type, [message | _]}}, state) do
    { error, stacktrace } = extract_exception(message[:error_info])
    context = extract_context(stacktrace)

    @bugsnag_client.notify(error,stacktrace, context: context, release_stage: Mix.env |> to_string)

    {:ok, state}
  end

  def handle_event({_level, _gl, _event}, state) do
    {:ok, state}
  end

  defp extract_exception(error_info) do
    { _, exception, _ } = error_info
     exception
  end

  defp extract_context(stacktrace) do
    stacktrace |> List.first |> elem 0
  end

end

http 要求を行うクライアントは、アプリケーション構成を使用してモックアウトされます。

defmodule Bugsnag.Mock do
  @behaviour Bugsnag

  def notify(error,stacktrace, options \\ []), do: nil
end

本番環境では正常に動作しますが、テスト カバレッジが必要でした。

GenServerをクラッシュさせるか、何らかの例外を発生させてこれをテストし、通知が呼び出されるかどうかを確認することを考えていました。これはあまり機能していないように感じます/Elixirですが、エラーが発生したときにエラーがキャプチャされることをテストしたかったのです。

4

1 に答える 1