phoenix with exq:如何在没有redis运行的情况下执行混合测试

vybvopom  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(451)

我在phoenix 1.4.16的phoenix应用程序中使用exq来运行一些后台作业。
其中一个可以这么简单:

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

它在dev环境中与redis完美地运行。
问题是,当我将代码推送到没有redis的ci服务器时,所有的测试都失败了。
测试配置如下
在config/test.exs中:

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

在test/test\u helper.exs中:

Exq.Mock.start_link(mode: :inline)

当我在没有运行redis的机器上运行“mix test”时,它失败如下:


**(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和:inline,但它们都无法启动混合测试。
问题:我可以在没有redis的机器上运行“混合测试”吗?
原因是我们公司不想在travis ci机器上安装redis。
我原以为在测试环境中使用exqmock会允许测试在没有redis的情况下运行,但事实并非如此。

q7solyqu

q7solyqu1#

我想出来了。
在config/test.exs中:

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

在test/test\u helper.exs中:

Exq.Mock.start_link(mode: :inline)

添加 config :exq, start_on_application: false 配置/test.exs解决了这个问题。

相关问题