2017-04-05 15 views
6

doctestにモジュールエイリアスを使用する方法はありますか?私は毎回長い名前をタイプする必要はありません。エリクシール - doctestでエイリアスをどうやって使うことができますか?

defmodule SomeLongModuleName.SubModule do 
    alias SomeLongModuleName.SubModule, as: SubModule 

    @doc """ 
     iex> SubModule.method(%{property_a: 1, property_b: 2) # CompileError 
     3 
    """ 
    def method(%{property_a: a, property_b: b) do 
    a + b 
    end 
end 

上記の例では、エイリアスを使用して長い行を避けることができます。 doctestでエイリアスを使用することは可能ですか?

+0

私はdoctestをがグローバルから実行することを前提としてい名前空間であるため、エイリアスを見ることができません。 – Dylanthepiguy

答えて

11

モジュール名を何度も何度も入力する必要がないと考えることができる2つの方法があります。

あなたのドキュメントで
  1. 使用補間とエイリアス名を使用します。import: trueを追加し、モジュールなしで、あなたのテストからdoctestまでお電話で

    defmodule SomeLongModuleName.SubModule do 
        alias SomeLongModuleName.SubModule, as: SubModule 
    
        @doc """ 
         iex> #{SubModule}.method(%{property_a: 1, property_b: 2}) 
         3 
        """ 
        def method(%{property_a: a, property_b: b}) do 
        a + b 
        end 
    end 
    
  2. 使用だけで関数名を:

    defmodule SomeLongModuleName.SubModule do 
        @doc """ 
         iex> method(%{property_a: 1, property_b: 2}) 
         3 
        """ 
        def method(%{property_a: a, property_b: b}) do 
        a + b 
        end 
    end 
    
    doctest SomeLongModuleName.SubModule, import: true 
    
+1

ニース!第1のオプションは(むしろきちんとした)ハックのように見え、第2のオプションはこのケースに対して正確に作られたように見えます。たぶん、注文を回すのだろうか? – Dylanthepiguy

+0

オプション2は魅力的に働いた:)ありがとう。 – PlagueHammer

1

テストの直前にalias SomeLongModuleName.SubModule, as: SubModule行を置くことができます。

もっと良い解決策は、ドキュメントにあまりにも多くのテストを入れず、エイリアスを使用しないことです。次に、テストファイルにalias SomeLongModuleName.SubModule, as: SubModuleを保存します。

1

dylanthepiguyで述べたように、テストファイルには、doctest行の直前にエイリアスを入れるのが良い解決策です。

テストのためのコードをインスツルメントすることは、IMHOコードの匂いです。

また、as: Submoduleがデフォルトであり、不要であることに注意してください。

1

lab419とdylanthepiguyからの回答のビル:doctestを持つ

モジュール:doctestを持つモジュールの

defmodule SomeLongModuleName.SubModule do 
    @doc """ 
     iex> SubModule.add(x, y) 
     3 
    """ 
    def add(x, y) do 
    x + y 
    end 
end 

テストケース:

defmodule SomeLongModuleName.SubModuleTest do 
    use ExUnit.Case, async: true 

    # Alias the submodule so we don't have to use the fully qualified name 
    alias SomeLongModuleName.SubModule 

    doctest SomeLongModuleName.SubModule, import: true 
end 
関連する問題