gpt4 book ai didi

elixir - 使用 Mox 测试函数链中的多个 API 调用

转载 作者:行者123 更新时间:2023-12-03 14:03:00 24 4
gpt4 key购买 nike

我正在尝试测试我是否正确地转换了从第三方 api 返回的数据。我在使用 Mox 时遇到了一些麻烦,因为我需要在数据转换期间点击两个单独的端点。让我通过发布代码更清楚地解释:

测试:

  test "players/0 return all active players" do
Statcasters.SportRadarNbaApi.ClientMock
|> expect(:league_hierarchy, fn ->
{:ok, league_hierarchy_map()}
end)

Statcasters.SportRadarNbaApi.ClientMock
|> expect(:team_profile, fn _ ->
{:ok, team_profile_map()}
end)


assert Statcasters.Sports.Nba.get_players() == ["Kevon Looney", "Patrick McCaw"]
end

代码:
  def get_players do
with {:ok, hierarchy} <- @sport_radar_nba_api.league_hierarchy,
team_ids <- get_team_ids(hierarchy),
players <- get_team_players(team_ids)
do
IO.inspect players
end
end

defp get_team_players(team_ids) do
for team_id <- team_ids do
{:ok, team} = @sport_radar_nba_api.team_profile(team_id)
end
end

忽略编写的代码实际上不会通过测试的事实。这是我试图弄清楚的测试失败。

问题:

第二个api调用 team_profile在测试中被调用两次,因为我遍历了两个 team_ids并为每个 team_id我调用 API。这是意料之中的,但测试并未为此做好准备,因为我收到此错误。

错误:
** (Mox.UnexpectedCallError) expected Statcasters.SportRadarNbaApi.ClientMock.team_profile/1 to be called once but it has been called 2 times in process #PID<0.410.0>

这是对的。我确实调用了两次,但是如何设置测试以期望此 API 端点将被调用两次?

最佳答案

third optional argument to expect 是应调用模拟函数的次数。在这种情况下,只需将其设置为 2 :

Statcasters.SportRadarNbaApi.ClientMock
|> expect(:team_profile, 2, fn _ ->
{:ok, team_profile_map()}
end)

关于elixir - 使用 Mox 测试函数链中的多个 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675892/

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