Phoenix с exq: как выполнить микс тест без повторного запуска - PullRequest
0 голосов
/ 14 апреля 2020

Я использую exq в своем приложении Phoenix с Phoenix 1.4.16 для запуска некоторых фоновых заданий.

Одна из них может быть такой простой:

defmodule PeopleJob do
  def perform(request) do
    IO.puts("Hello from PeopleJob:\n#{inspect(request)}")
  end
end

Она запускается с помощью redis в среде dev отлично.

Проблема в том, что когда я пу sh код для CI-сервера, который не имеет redis, все тесты не пройдены.

Конфигурация теста выглядит следующим образом

В config / test.exs :

config :exq, queue_adapter: Exq.Adapters.Queue.Mock

В test / test_helper.exs :

Exq.Mock.start_link(mode: :inline)

Когда Я запускаю «тест смешивания» на машине, на которой не запущен Redis, она не работает следующим образом:

** (Mix) Could not start application exq: Exq.start(:normal, []) returned an error: shutdown: failed to start child: Exq.Manager.Server
    ** (EXIT) an exception was raised:
        ** (RuntimeError)


====================================================================================================
ERROR! Could not connect to Redis!

Configuration passed in: [host: "127.0.0.1", port: 6379, database: 0, password: nil]
Error: :error
Reason: {:badmatch, {:error, %Redix.ConnectionError{reason: :closed}}}

Make sure Redis is running, and your configuration matches Redis settings.
====================================================================================================

            (exq) lib/exq/manager/server.ex:393: Exq.Manager.Server.check_redis_connection/1
            (exq) lib/exq/manager/server.ex:173: Exq.Manager.Server.init/1
            (stdlib) gen_server.erl:374: :gen_server.init_it/2
            (stdlib) gen_server.erl:342: :gen_server.init_it/6
            (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

На самом деле я пробую все 3 режима : redis , : fake и : встроенный , но все они не запускают тест смешивания.

Вопрос: Можно ли запустить " тест смешивания " на машина, у которой нет redis?

Причина в том, что наша компания не хочет устанавливать redis на машину Travis CI.

Я ожидал, что использование Exq Mock в тестовой среде позволит тест на запустить без redis, но это не так.

1 Ответ

1 голос
/ 20 апреля 2020

Я понял.

В config / test.exs :

config :exq, queue_adapter: Exq.Adapters.Queue.Mock
config :exq, start_on_application: false

В test / test_helper.exs :

Exq.Mock.start_link(mode: :inline)

Добавление config :exq, start_on_application: false к config / test.exs решило эту проблему.

...