如何在测试中生成牛仔服务器?

How to spawn a cowboy server in a test?

背景

我有一个特定的测试,我需要生成一个监听端口 8082 的牛仔服务器,returns 一些静态响应。

Objective

通常我会在我的 application.ex 文件中启动一个 cowboy 进程,如下所示:

   def start(_type, args) do
     children = children([{Cowboy, scheme: :http, plug: MyServer, options: [port: 8082]}])

     opts = [strategy: :one_for_one, name: MyApp.Supervisor]
     Supervisor.start_link(children, opts)
   end

但是我正在处理的代码不是应用程序,所以我不能那样做。

我的 objective 是使用 ExUnit 的 setup_all 回调来执行此操作,但是我不知道该怎么做,也不知道是否可行。

问题

  1. 如何在 ExUnit 中启动牛仔服务器?

经过一番挖掘,我发现有一个名为 bypass 的库已经涵盖了这个用例。

这个解决方案也得到了 Elixir 社区的确认,似乎也暗示了它:https://elixirforum.com/t/how-to-spawn-a-cowboy-server-in-a-test/36686