gpt4 book ai didi

testing - 如何在 Elixir 的 doctest 中进行字符串插值?

转载 作者:行者123 更新时间:2023-11-28 20:37:38 24 4
gpt4 key购买 nike

我一直在 Elixir 中尝试 doctests,在我尝试进行字符串插值之前它一直运行良好。

代码如下:

  @doc"""
Decodes the user resource from the sub claim in the received token for authentication.

## Examples

iex> attrs = %{email: "test@example.com", password: "password", password_confirmation: "password"}
iex> {:ok, user} = Accounts.create_user(attrs)
iex> resource_from_claims(%{"sub" => "User:#{user.id}"})
{:ok, %User{}}

"""
def resource_from_claims(%{"sub" => "User:" <> id}) do
resource = Accounts.get_user(id)
case resource do
nil -> {:error, :no_result}
_ -> {:ok, resource}
end
end

我在运行 mix test 时遇到这个错误:

variable "user" does not exist and is being expanded to "user()", please use parentheses to remove the ambiguity or change the variable name

我可以确认 user 变量确实存在并且可以处理几乎所有其他内容,除非我尝试将它放在字符串插值中。

还有其他方法可以在 doctests 中进行字符串插值吗?

编辑:看起来我收到了这个错误,因为 @doc 中的字符串插值部分实际上是在 doctest 的范围之外运行,而不是在运行作为模块本身的一部分。我将看看是否有另一种方法可以在 doctest 的上下文中进行字符串插值。

最佳答案

发布编辑后(见上文),我发现解决方案是使用 ~S 调用 @doc 字符串:

  @doc ~S"""
Decodes the user resource from the sub claim in the received token for authentication.

## Examples

iex> attrs = %{email: "test@example.com", password: "password", password_confirmation: "password"}
iex> {:ok, user} = Accounts.create_user(attrs)
iex> resource_from_claims(%{"sub" => "User:#{user.id}"})
{:ok, %User{}}

"""

这样,模块将忽略在 @doc block 中写入的任何字符串插值,这将允许 doctest 执行字符串插值。

引用:https://github.com/elixir-lang/elixir/issues/2512

关于testing - 如何在 Elixir 的 doctest 中进行字符串插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com