在凤凰测试中断言模式匹配

时间:2017-11-30 02:12:33

标签: unit-testing elixir phoenix-framework

我正在测试一个phoenix / elixir应用程序,我发现自己使用了类似下面的东西。

player = insert(:player)
assert [%Player{id: x}] = Players.site_players(player.site_id)
assert x == player.id

这实现了我想要的东西,主要是它确保Players.site_players / 1返回一个数组并且该数组包含播放器。我觉得这可以更简洁地完成。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定你的期望是多么简洁,但是如何在一行代码中做同样的事情:

%Player{id: id, site_id: site_id} = insert(:player)
assert [%Player{id: ^id}] = Players.site_players(site_id)

正如您可能已经知道的那样,您不能使用pin运算符进行函数调用,只能使用局部变量名称,这就是我们将id提取到第一行中的变量的原因。

如果需要,第一行也可以是以下内容:

%{id: id, site_id: site_id} = insert(:player)