title: How to run tests in elixir/phoenix using hound and selenium
body: <p>Here is my <strong>mix.exs</strong></p>
  
  <pre><code>defmodule HelloPhoenix.Mixfile do
  use Mix.Project
  
  def project do
  [app: :hello_phoenix,
   version: "0.0.1",
   elixir: "~&gt; 1.0",
   elixirc_paths: elixirc_paths(Mix.env),
   compilers: [:phoenix, :gettext] ++ Mix.compilers,
   build_embedded: Mix.env == :prod,
   start_permanent: Mix.env == :prod,
   aliases: aliases,
   deps: deps]
  end
  
  # Configuration for the OTP application.
  #
  # Type `mix help compile.app` for more information.
  def application do
       [mod: {HelloPhoenix, []},
       applications: app_list(Mix.env) ]
   end
  
      def app_list do
      [:phoenix, :phoenix_html, :cowboy, :logger, :gettext, :phoenix_ecto, :postgrex]
  end
  
      def app_list(:test), do: [:hound | app_list]
  def app_list(_),     do: app_list
  
  
    # Specifies which paths to compile per environment.
        defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
    defp elixirc_paths(_),     do: ["lib", "web"]
  
    # Specifies your project dependencies.
    #
    # Type `mix help deps` for examples and options.
    defp deps do
  [{:phoenix, "~&gt; 1.1.4"},
   {:postgrex, "&gt;= 0.0.0"},
   {:phoenix_ecto, "~&gt; 2.0"},
   {:phoenix_html, "~&gt; 2.4"},
   {:phoenix_live_reload, "~&gt; 1.0", only: :dev},
   {:gettext, "~&gt; 0.9"},
   {:cowboy, "~&gt; 1.0"},
  {:hound, "~&gt; 0.8"}]
    end
  
    # Aliases are shortcut or tasks specific to the current project.
     # For example, to create, migrate and run the seeds file at once:
     #
     #     $ mix ecto.setup
     #
     # See the documentation for `Mix` for more info on aliases.
     defp aliases do
  ["ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
   "ecto.reset": ["ecto.drop", "ecto.setup"]]
    end
   end
  </code></pre>
  
  <p>Here is my <strong>config/config.exs</strong></p>
  
  <pre><code># Define your application's host and port (defaults to "http://localhost:4001")
  #config :hound, app_host: "http://localhost", app_port: 4000
  
  # Start with selenium driver (default)
  config :hound, driver: "selenium"
  
  # Use Chrome with the default driver (selenium)
  #config :hound, browser: "chrome"
  
  # Start with default driver at port 1234 and use firefox
  #config :hound, port: 1234, browser: "firefox"
  
  # Start Hound for PhantomJs
  #config :hound, driver: "phantomjs"
  
  # Start Hound for ChromeDriver (default port 9515 assumed)
  #config :hound, driver: "chrome_driver"
  </code></pre>
  
  <p><strong>test/sample_test.exs</strong></p>
  
  <pre><code>    defmodule HelloPhoenix.SampleTest do
    use HelloPhoenix.ConnCase
  
    # Import Hound helpers
    use Hound.Helpers
  
    # Start a Hound session
    hound_session
      IO.puts "hai"
    test "GET /" do
      navigate_to("http://localhost:4000")
      :timer.sleep(5000) # puts server to sleep
      assert page_source =~ "Welcome to Phoenix"
    end
  end
  </code></pre>
  
  <p><strong>config/test.exs</strong></p>
  
  <pre><code># We don't run a server during test. If one is required,
  # you can enable the server option below.
  config :hello_phoenix, HelloPhoenix.Endpoint,
    http: [port: 4000],
    server: true
  </code></pre>
  
  <p><strong><em>Starting a webdriver server</em></strong> (tried all these one at a time)</p>
  
  <ol>
  <li><p>java -jar selenium-server-standalone-2.48.2.jar </p></li>
  <li><p>java -jar selenium-server-standalone-2.49.0.jar</p></li>
  <li><p>java -jar selenium-server-standalone-2.52.0.jar</p></li>
  <li><p>docker run -it -p 4444:4444 danielfrg/selenium   </p></li>
  <li><p>docker run --privileged -p 4444:4444 -p 5999:5999 -d vvoyer/docker-selenium-firefox-chrome</p></li>
  </ol>
  
  <p><strong><em>I get this error each time I run the app :</em></strong></p>
  
  <pre><code>karthik@dkarnik2-Vostro-3558:~/5/hello_phoenix/hello_phoenix$ mix test
  hai
  ....10:46:52.543 [error] GenServer Hound.SessionServer terminating
  ** (MatchError) no match of right hand side value: {:error, %HTTPoison.Error{id: nil, reason: :econnrefused}}
      (hound) lib/hound/request_utils.ex:43:Hound.RequestUtils.send_req/4
      (hound) lib/hound/session_server.ex:67: Hound.SessionServer.handle_call/3
      (stdlib) gen_server.erl:629: :gen_server.try_handle_call/4
      (stdlib) gen_server.erl:661: :gen_server.handle_msg/5
      (stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
  
  
    1) test GET / (HelloPhoenix.SampleTest)
       test/sample_test.exs:10
       ** (exit) exited in: GenServer.call(Hound.SessionServer, {:change_session, #PID&lt;0.394.0&gt;, :default, %{}}, 60000)
           ** (EXIT) an exception was raised:
               ** (MatchError) no match of right hand side value: {:error, %HTTPoison.Error{id: nil, reason: :econnrefused}}
                   (hound) lib/hound/request_utils.ex:43: Hound.RequestUtils.send_req/4
                   (hound) lib/hound/session_server.ex:67: Hound.SessionServer.handle_call/3
                   (stdlib) gen_server.erl:629: :gen_server.try_handle_call/4
                   (stdlib) gen_server.erl:661: :gen_server.handle_msg/5
                   (stdlib) proc_lib.erl:240:     :proc_lib.init_p_do_apply/3
       stacktrace:
         (elixir) lib/gen_server.ex:544: GenServer.call/3
         test/sample_test.exs:8: HelloPhoenix.SampleTest.__ex_unit_setup_1/1
         test/sample_test.exs:1: HelloPhoenix.SampleTest.__ex_unit__/2
  
  
  
  Finished in 0.7 seconds (0.5s on load, 0.1s on tests)
  5 tests, 1 failure
  
  Randomized with seed 332515
  karthik@dkarnik2-Vostro-3558:~/5/hello_phoenix/hello_phoenix$
  </code></pre>