2017-11-30 1 views
0

私はphoenix/elixirアプリケーションをテストしています。次のようなものを使用しています。フェニックステストでのアサートパターンの一致

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

これは、Player.site_players/1が配列を返し、その配列にプレーヤが含まれていることを保証します。私はこれがもっと簡潔にできるように感じる。助言がありますか?

+1

それを乾燥させる最良の方法は、これらすべてのテストを取り除くことであろう。あなたは 'DB'機能と' Ecto'機能をテストしています。意味がない。 _your_アプリケーションのテストでは、独自のテストを持つ 'Ecto'ではなく、あなたのapplication_をテストする必要があります。 – mudasobwa

+0

私のコード(この場合はsite_playersメソッド)がEctoに適切な処理を依頼していることをテストしています。これは、説明のために選んだ、私がクリーンアップしたいパターンに遭遇する最も簡単な場所です。他の場所では、より複雑なコードに対して実行されます。 – biagidp

+0

'defmodule Players、def site_players(id)、do:%Player {id:id}'の 'Player'の実装は驚くことにこのテストに合格しました_。基本的に**実装の詳細をテストすることを意味します**。 – mudasobwa

答えて

1

私はあなたが期待していたか簡潔わからないんだけど、ここでは、コードの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) 
関連する問題