在doctest中测试HashSet

roc*_*BOO 4 testing doctest elixir hashset

我试图通过iex使用doctest测试HashSet.如果我运行下面的行,它会给出相同的结果,但#HashSet<["rockerboo"]>}无法在语法中表示.我想不出一种正确表达它的方法,我找不到任何例子.谢谢!

  @doc """
  Adds user to HashSet in state

  ## Examples
      iex> Elirc.Channel.add_user_to_state("rockerboo", %{users: HashSet.new})
      %{users: #HashSet<["rockerboo"]>}
  """
  def add_user_to_state(user, state) do
    %{state | users: HashSet.put(state.users, user) }
  end
Run Code Online (Sandbox Code Playgroud)

运行时mix test,我收到以下错误.

 Doctest did not compile, got: (TokenMissingError) lib/elirc/channel.ex:99: missing terminator: } (for "{" starting at line 99)
 code: %{users: #HashSet<["rockerboo"]>}
Run Code Online (Sandbox Code Playgroud)

第99行是 %{state...

Paw*_*rok 5

你可以HashSet用不同的方式构建你,这样它就是一个有效的Elixir表达式.例如,这对我有用:

## Examples
  iex> Elirc.Channel.add_user_to_state("rockerboo", %{users: HashSet.new})
  %{users: ["rockerboo"] |> Enum.into(HashSet.new)}
Run Code Online (Sandbox Code Playgroud)

这也是Exxtit.DocTest文档在"不透明类型"下推荐的方法