【问题标题】:Run terminal command before tests - Elixir测试前运行终端命令 - Elixir
【发布时间】:2018-05-17 00:24:46
【问题描述】:

我正在使用 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"]

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

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

【问题讨论】:

    标签: elixir phoenix-framework fakes3


    【解决方案1】:

    只需使用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 任务,接受要运行的脚本或要评估的表达式作为参数:

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

    【讨论】:

    • 很抱歉让你把这个拼出来,但是我应该把 fakes3 函数放在哪里?
    • 进入你用来测试 S3 的案例,比如 test/fakes3_test.exs,在模块内的任何地方。
    • 其中的~S 是什么?还有更小的~s?
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2020-12-21
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2021-11-05
    相关资源
    最近更新 更多