【问题标题】:Importing test code in elixir unit test在 Elixir 单元测试中导入测试代码
【发布时间】:2015-08-19 13:44:07
【问题描述】:

我正在编写一些与 SSH 交互的 Elixir 代码的测试。在我的测试中,我想启动一个可以运行我的代码的 SSH 服务器。我更愿意将此代码存储在测试目录中它自己的文件中,并通过各种不同的测试将其导入。

不过,我无法让它很好地工作。

我尝试创建一个包含SSHServer 模块的test/ssh_server.ex 文件,但是当我将import SSHServer 添加到我的测试中时,我得到:

(CompileError) test/end_to_end_test.exs:13: 模块 SSHServer 未加载且找不到

我错过了什么吗?有什么方法可以强制mix test 导入我的 test/ssh_server.ex 文件吗?

【问题讨论】:

    标签: elixir elixir-mix


    【解决方案1】:

    编译模块,然后就可以使用了。

    这可以在任一 iex 中完成

    iex > c "test/ssh_server.ex"
    

    或者使用 elixirc

    elixirc "test/ssh_server.ex"
    

    http://elixir-lang.org/getting-started/modules.html#compilation

    【讨论】:

      【解决方案2】:

      我目前已通过从我的 test_helper.exs 文件中手动加载代码来解决此问题:

      Code.load_file("test/ssh_server.ex")
      

      【讨论】:

      • 这是一个很好的解决方案。我也将文件命名为.exs,因为它从未被编译过。另一种选择是告诉 Mix 在一个特殊的目录中编译所有东西,比如 test/support。凤凰在这里做到这一点:github.com/phoenixframework/phoenix/blob/…
      • 我在测试 Code.load_file("priv/repo/seeds.exs") 之前使用它来播种 setup,它就像一个魅力。
      • 我会选择Code.require_file 而不是加载。这将确保文件只加载一次。我也同意使用 .exs 扩展名。这就是 ecto 的做法:github.com/elixir-ecto/ecto/blob/master/test/ecto/…
      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多