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.