2016-08-20 6 views
2

ユニットテストのためにElixirのExUnitを使用すると、誰もがテスト失敗メッセージに興奮しているようです。しかし、もし私が==以外のものをテストしているのなら、私は有用なエラーメッセージを得ることができません。例えばエリクサー:テスト失敗メッセージ

assert String.contains(my_string, "expected string") 

    Expected truthy, got false 

私は私の失敗が、私はすぐに彼らが与えるフィードバックに反復することができ、より有益になるように、私のテストを書くことを好みます。より有益なテストの失敗を得る方法はありますか?例えばString.contains?に対するテストの特定の場合については

Expected "an unexpected string" to contain "expected string" 
+0

これを行う 'assert_contains'マクロを書くか、失敗したときに出力する' assert'にカスタムメッセージを渡すことができますが、探しているソリューションの種類がわかりません。 – Dogbert

+0

すべての資産はチェック真実です。メッセージを供給することはできますが、それ自体では、実行中のものをイントロスペクトしてアサーションの結果を生成することはありません。これは、例えば、https://groups.google.com/forum/m/#!トピック/ elixir-lang-core/KYAkagiKr0wですが、あなたが求めているようにそれはまだ自動ではありません。 –

答えて

4

それは箱から出して、より良いテスト失敗メッセージを報告しますと、あなたは、正規表現のマッチ演算子=~を検討することができます。

一般的に、ExUnitのassertは、標準ライブラリのすべての関数の内部意味を認識しません。カスタムエラーメッセージを提供できる理由はここにある:

assert String.contains?(my_string, "expected string"), 
     ~s(Expected #{inspect my_string} to contain "expected string") 

あなたは多くの人がString.contains?/2のためにアサートしている場合、あなたはあなた自身の主張を定義することができます。ここでは

def assert_contains(string, substring) do 
    assert String.contains?(string, substring), 
     "Expected #{inspect string} to contain #{inspect substring}" 
end 

test "my string" do 
    assert_contains my_string, "expected string" 
end 

は表現がありassertrefuteは認識します

  • =マッチ演算子
  • :エリクシール1.3用の出力テーラー
  • match?/2
  • >
  • <=以下厳密な等価(
  • ===以上
  • >=
  • 等しいより大きく
  • <以下機能
  • !否定
  • ==等価演算子浮動小数点数と整数を区別する)
  • =~正規表現可算

でマッチ演算子

  • !==厳格な不平等
  • !=不平等
  • in会員これらのほとんどは、同じ特別な処理を取得:彼らは中置演算子であり、assertを報告しますlhsには、rhsの値が表示されます。

  • 関連する問題