运行 测试前的终端命令 - Elixir
Run terminal command before tests - Elixir
我正在测试与 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"]
这不起作用,因为它不是混合任务。
我也可能以错误的方式思考这个问题。我怎样才能在测试前使用命令 运行?这是思考这个问题的正确方法吗?
只需使用 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"
]
我正在测试与 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"]
这不起作用,因为它不是混合任务。
我也可能以错误的方式思考这个问题。我怎样才能在测试前使用命令 运行?这是思考这个问题的正确方法吗?
只需使用 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"
]