Hi,
I would like to know how to write test for an Elixir script created using Mix.install
, let say I have script.exs
then what is the best way to write test for it?
Thank you in advance.
Hi,
I would like to know how to write test for an Elixir script created using Mix.install
, let say I have script.exs
then what is the best way to write test for it?
Thank you in advance.
not sure if this is the best way, but it should work =)
script.exs
defmodule Foo do def bar, do: :baz end
In the same dir put script_test.exs
Code.require_file("script.exs") ExUnit.start() defmodule FooTest do use ExUnit.Case test "bar/0 does :baz" do assert :baz == Foo.bar() end end
and run the test with
elixir script_test.exs
@RudManusachi
It work like charm, thank you so much.
The following is a working example.
# demo.exs Mix.install([ {:bunt, "~> 0.2.0"} ]) defmodule Demo do def hello(name \\ "John") do ["Hello, ", :green, :bright, name] |> Bunt.ANSI.format |> IO.puts end end Demo.hello("Smahi")
# demo_test.exs Code.require_file("demo.exs") ExUnit.start() defmodule DemoTest do use ExUnit.Case import ExUnit.CaptureIO test "hello/1" do output = capture_io(fn -> Demo.hello("Jahn") end) assert output == "Hello, \e[32m\e[1mJahn\e[0m\n" end end
One important thing to keep in mind!
When we run Code.require_file/1
it compiles (executes) the file. So if we do some side effects, external service calls etc… those will be run each time we run tests
Need to separate out the declaration and the usage.