Packages
espec
1.1.1
1.10.0
1.9.2
1.9.1
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.7
0.3.5
0.3.0
0.2.0
0.1.0
BDD testing framework for Elixir inspired by RSpec.
Current section
Files
Jump to
Current section
Files
lib/espec.ex
defmodule ESpec do
@moduledoc """
The ESpec basic module. Imports a lot of ESpec components.
One should `use` the module in spec modules.
"""
@spec_agent_name :espec_specs_agent
defmacro __using__(args) do
quote do
ESpec.add_spec(__MODULE__)
Module.register_attribute __MODULE__, :examples, accumulate: true
@shared unquote(args)[:shared] || false
@before_compile ESpec
import ESpec.Context
@context [%ESpec.Context{description: inspect(__MODULE__),
module: __MODULE__, line: __ENV__.line, opts: unquote(args)}]
import ESpec.ExampleHelpers
import ESpec.DocTest, only: [doctest: 1, doctest: 2]
import ESpec.Expect
use ESpec.Expect
import ESpec.Assert
import ESpec.To
import ESpec.Should
use ESpec.Should
import ESpec.AssertionHelpers
import ESpec.AssertReceive
import ESpec.RefuteReceive
import ESpec.Allow
import ESpec.Before
import ESpec.Finally
import ESpec.Let
import ExUnit.CaptureIO
import ExUnit.CaptureLog
use ESpec.DescribedModule
end
end
defmacro __before_compile__(_env) do
quote do
def examples, do: Enum.reverse(@examples)
end
end
@doc """
Allows to set the config options.
ESpec.configure(fn(config) ->
config.key value
config.another_key another_value
end)
"""
def configure(func), do: ESpec.Configuration.configure(func)
@doc "Runs the examples"
def run do
ESpec.Runner.start
ESpec.Runner.run
end
@doc "Starts ESpec. Starts agents to store specs, mocks, cache 'let' values, etc."
def start do
{:ok, _} = Application.ensure_all_started(:espec)
start_specs_agent()
ESpec.Let.Impl.start_agent
ESpec.Mock.start_agent
ESpec.Output.start
start_capture_server()
end
@doc "Stops ESpec components"
def stop do
stop_specs_agent()
ESpec.Let.Impl.stop_agent
ESpec.Mock.stop_agent
ESpec.Runner.stop
ESpec.Output.stop
stop_capture_server()
end
@doc "Returns all examples."
def specs, do: Agent.get(@spec_agent_name, &(&1))
@doc "Adds example to the agent."
def add_spec(module), do: Agent.update(@spec_agent_name, &[module | &1])
defp start_specs_agent, do: Agent.start_link(fn -> [] end, name: @spec_agent_name)
def stop_specs_agent, do: Agent.stop(@spec_agent_name)
defp start_capture_server do
if Code.ensure_loaded?(ExUnit.CaptureServer) do
unless GenServer.whereis(ExUnit.CaptureServer), do: ExUnit.CaptureServer.start_link()
end
end
defp stop_capture_server do
if Code.ensure_loaded?(ExUnit.CaptureServer) do
if GenServer.whereis(ExUnit.CaptureServer), do: GenServer.stop(ExUnit.CaptureServer)
end
end
end