在Elixir单元测试中导入测试代码

15
我正在编写一些与SSH交互的Elixir代码的测试。在我的测试中,我希望启动一个SSH服务器来运行我的代码。我更喜欢将此代码存储在测试目录中的其自己的文件中,并通过不同的测试进行导入。
但是,我并没有成功地实现它。我尝试创建一个名为 "test/ssh_server.ex" 的文件,其中包含一个"SSHServer"模块,但是当我在我的测试中添加“import SSHServer”时,出现以下错误:
(CompileError) test/end_to_end_test.exs:13: module SSHServer is not loaded and could not be found
我是否遗漏了什么?是否有一种方法强制"mix test"导入我的test/ssh_server.ex文件?
2个回答

17

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

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

13
这是一个不错的解决方案。我会将该文件也命名为.exs,因为它永远不会被编译。另一种选择是告诉Mix将所有内容编译到一个特殊的目录中,例如test/support。Phoenix在这里执行了这个操作:https://github.com/phoenixframework/phoenix/blob/db2f953f24973fab8aa2aab3bd8fc9c87a17adc8/installer/templates/new/mix.exs#L10 - José Valim
我在我的测试"setup"中使用Code.load_file("priv/repo/seeds.exs")进行播种,这对于测试之前的播种非常有效。 - user4275029
3
我建议使用 Code.require_file 代替 load。这将确保文件只被加载一次。我也同意使用 .exs 扩展名。这就是 ecto 的做法:https://github.com/elixir-ecto/ecto/blob/master/test/ecto/test_helper.exs - Steven L.

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接