Запустите команду терминала перед тестами - Elixir - PullRequest
0 голосов
/ 16 мая 2018

Я тестирую соединение S3 с fakeS3, и оно отлично работает. Единственным недостатком является то, что мне приходится запускать поддельный сервер 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 голосов
/ 16 мая 2018

Просто используйте ExUnit.Callbacks.setup_all/1:

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

setup_all :fakes3

Вышеуказанное должно быть помещено в футляр, который вы используете для проверки S3.


BTW,это также можно сделать с помощью mix.Он имеет задачу run, которая принимает либо сценарий для запуска, либо выражение для оценки в качестве аргумента:

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