View Source Testing Guidelines
As Telemetrex is an Elixir-friendly wrapper around :telemetry
, it is advised to follow :telemetry
best practices with regards to testing as well.
Given the following module implementing Telemetrex.span
:
defmodule MyApp.Users do
require Telemetrex
def user_create(user_params) do
Telemetrex.span event: [:my_app, :user_create], context: %{params: user_params} do
%MyApp.User{}
|> MyApp.User.create_changeset(user_params)
|> MyApp.Repo.insert()
after
{:ok, %MyApp.User{} = user} ->
%{user: user}
{:error, changeset} ->
%{error: true, changeset: changeset}
end
end
end
Here's how we could test the firing of the events:
test "test events are fired" do
# Arrange
ref = :telemetry_test.attach_event_handlers(self(), [[:my_app, :user_create, :start], [:my_app, :user_create, :start]])
# Act
MyApp.Users.user_create(%{first_name: "thanks", last_name: "telemetry"})
# Assert
assert_received {[:my_app, :user_create, :start], ^ref, %{measurement: _}, %{meta: _}}
assert_received {[:my_app, :user_create, :stop], ^ref, %{measurement: _}, %{meta: _}}
end