1

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

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

fakes3 -r ~/.s3bucket -p 4567

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

我已经尝试过了,但它没有很好的理由:

混合.exs

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

那行不通,因为它不是混合任务。

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

4

1 回答 1

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"
]
于 2018-05-16T15:51:41.063 回答