2017-03-03 63 views
0

我有一个简单的项目,我已经开始通话测试。所以我做了:我在哪里可以将我的模块放入Elixir混合应用程序中?

mix new test 

我得到了通常的目录树。在lib目录中,是test.ex.但是我想让test.ex使用一个名为Mystuff的模块,但我不知道把mystuff.ex放在哪里,因为我得到了一个编译错误。

这里是test.ex(测试/ lib目录):

defmodule Test do 

    use Mystuff 

    @moduledoc """ 
    Documentation for Test. 
    """ 

    @doc """ 
    Hello world. 

    ## Examples 

     iex> Test.hello 
     :world 

    """ 
    def hello do 
    Mystuff.bye() 
    end 
end 

,这里是mystuff.ex我也包含在测试/ lib目录下:

defmodule Test.Mystuff do 
    def bye do 
    IO.puts "bye" 
    end 
end 

但是如果我运行从项目的主目录(测试)我得到“IEX -S组合”:

Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] 

Compiling 3 files (.ex) 

== Compilation error on file lib/test/mystuff.ex == 
** (CompileError) lib/test/mystuff.ex:1: cannot define module Test.Mystuff because it is currently being defined in lib/mystuff.ex:1 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 

所以我会命名一些错误?使用错误的东西?把东西放在错误的目录中?

+0

您正在定义两次'Test.MyStuff'模块。一旦在'lib/test/mystuff.ex'中,另一个在'lib/mystuff.ex'中。改变他们的名字之一,它应该编译。 – Sheharyar

+0

删除重复模块后,您还想了解['import','alias','use'和'require']之间的区别(http://elixir-lang.org/getting-started /alias-require-and-import.html) –

+0

_Sidenote:_测试将具有'.exs'扩展名以防止其自动编译。没有'ExUnit'本身和'doctest'宏,'ExUnit'测试是没有意义的。 – mudasobwa

回答

0

alias Test.Mystuff替换use Mystuff

相关问题