Dependency check fails when in test environment

ecto
testing
decimal

#1

Hi,

I recently tried to upgrade a small application to ecto2 and sqlite_ecto2. Previously I could just run mix test to run my tests, but now if I do that dependency check fails while running tests:

$ mix test
Unchecked dependencies for environment test:

  • decimal (Hex package)
    the dependency does not match the requirement “~> 1.2”, got “1.1.2”
  • ecto (Hex package)
    the dependency does not match the requirement “~> 2.2”, got “1.1.9”
  • sqlitex (Hex package)
    the dependency does not match the requirement “~> 1.3.2 or ~> 1.4”, got “0.8.0”
    ** (Mix) Can’t continue due to errors on dependencies

There is a difference in the output of mix deps when run in the different environments:

$ MIX_ENV=test mix deps

  • esqlite 0.2.3 (Hex package) (rebar3)
    locked at 0.2.3 (esqlite) 1a8b6087
    ok
  • connection 1.0.4 (Hex package) (mix)
    locked at 1.0.4 (connection) a1cae722
    ok
  • ranch 1.3.2 (Hex package) (rebar3)
    locked at 1.3.2 (ranch) e4965a14
    ok
  • poolboy 1.5.1 (Hex package) (rebar)
    locked at 1.5.1 (poolboy) 6b461639
    ok
  • decimal (Hex package) (mix)
    locked at 1.4.1 (decimal) ad9e501e
    the dependency does not match the requirement “~> 1.2”, got “1.1.2”
  • sbroker 1.0.0 (Hex package) (rebar3)
    locked at 1.0.0 (sbroker) 28ff1b5e
    ok
  • db_connection 1.1.2 (Hex package) (mix)
    locked at 1.1.2 (db_connection) 2865c2a4
    ok
  • ecto (Hex package) (mix)
    locked at 2.2.7 (ecto) 2074106f
    the dependency does not match the requirement “~> 2.2”, got “1.1.9”
  • cowlib 1.0.2 (Hex package) (rebar3)
    locked at 1.0.2 (cowlib) 9d769a1d
    ok
  • cowboy 1.1.2 (Hex package) (rebar3)
    locked at 1.1.2 (cowboy) 61ac29ea
    ok
  • mime 1.2.0 (Hex package) (mix)
    locked at 1.2.0 (mime) 78adaa84
    ok
  • plug 1.4.3 (Hex package) (mix)
    locked at 1.4.3 (plug) 236d77ce
    ok
  • sqlitex (Hex package) (mix)
    locked at 1.3.3 (sqlitex) 3aac5fd7
    the dependency does not match the requirement “~> 1.3.2 or ~> 1.4”, got “0.8.0”
  • sqlite_ecto2 2.2.2 (Hex package) (mix)
    locked at 2.2.2 (sqlite_ecto2) 7a3e5c05
    ok

And in prod or dev:

$ mix deps

  • esqlite 0.2.3 (Hex package) (rebar3)
    locked at 0.2.3 (esqlite) 1a8b6087
    ok
  • connection 1.0.4 (Hex package) (mix)
    locked at 1.0.4 (connection) a1cae722
    ok
  • ranch 1.3.2 (Hex package) (rebar3)
    locked at 1.3.2 (ranch) e4965a14
    ok
  • poolboy 1.5.1 (Hex package) (rebar)
    locked at 1.5.1 (poolboy) 6b461639
    ok
  • decimal 1.4.1 (Hex package) (mix)
    locked at 1.4.1 (decimal) ad9e501e
    ok
  • sbroker 1.0.0 (Hex package) (rebar3)
    locked at 1.0.0 (sbroker) 28ff1b5e
    ok
  • db_connection 1.1.2 (Hex package) (mix)
    locked at 1.1.2 (db_connection) 2865c2a4
    ok
  • ecto 2.2.7 (Hex package) (mix)
    locked at 2.2.7 (ecto) 2074106f
    ok
  • cowlib 1.0.2 (Hex package) (rebar3)
    locked at 1.0.2 (cowlib) 9d769a1d
    ok
  • cowboy 1.1.2 (Hex package) (rebar3)
    locked at 1.1.2 (cowboy) 61ac29ea
    ok
  • mime 1.2.0 (Hex package) (mix)
    locked at 1.2.0 (mime) 78adaa84
    ok
  • plug 1.4.3 (Hex package) (mix)
    locked at 1.4.3 (plug) 236d77ce
    ok
  • sqlitex 1.3.3 (Hex package) (mix)
    locked at 1.3.3 (sqlitex) 3aac5fd7
    ok
  • sqlite_ecto2 2.2.2 (Hex package) (mix)
    locked at 2.2.2 (sqlite_ecto2) 7a3e5c05
    ok

Since I’m quite new to this I don’t understand these differences, they might me explainable but not by me. This is my mix.exs:

defmodule Helloplug.Mixfile do
  use Mix.Project

  def project do
    [
      app: :helloplug,
      version: "0.1.0",
      elixir: "~> 1.5",
      start_permanent: Mix.env == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger, :sqlite_ecto2, :ecto, :cowboy, :plug],
      mod: {WebsiteRouter, []}
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:cowboy, "~> 1.1"},
      {:plug, "~> 1.4"},
      {:sqlite_ecto2, "~> 2.2"},
      {:ecto, "~> 2.2"}
    ]
  end
end

#2

Dependencies are only updated when you run mix deps.update -all or deps.unlock dep followed by mix.deps.get

I’d suggest in this config a mix deps.update --all should be ok.


#3

Great, that worked! Thank you.