测试前运行终端命令 - Elixir

时间:2018-05-16 15:44:07

标签: elixir phoenix-framework fakes3

我正在使用fakeS3测试S3连接,它运行良好。唯一的缺点是我必须在每次运行测试之前运行假S3服务器,否则S3测试会明显中断。

我想找到一种在测试运行之前运行此命令的方法:

fakes3 -r ~/.s3bucket -p 4567

理论上,这将启动Sinatra服务器,以便S3测试通过,但我不需要每次都启动一个单独的服务器。

我已经尝试了这个并且它没有充分的理由工作:

MIX.exs

 test: ["ecto.create --quiet", "ecto.migrate", "fakes3 -r ~/.s3bucket -p 4567", "test"]

这不起作用,因为它不是混合任务。

我也可能以错误的方式思考这个问题。如何在测试之前运行命令,这是考虑这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:2)

只需使用ExUnit.Callbacks.setup_all/1

def fakes3(_context) do
  System.cmd("fakes3", ~w|-r ~/.s3bucket -p 4567|)
  :ok
end

setup_all :fakes3

以上是用于测试S3的情况。

顺便说一下,这也可以用mix来完成。它有run任务,它接受要运行的脚本或表达式作为参数的eval:

test: [ 
  "ecto.create --quiet",
  "ecto.migrate",
  ~S[run -e "System.cmd(~s|fakes3|, ~w|-r ~/.s3bucket -p 4567|)"],
  "test"
]