Packages
espec
0.8.19
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) }]
@defined_lets []
import ESpec.ExampleHelpers
import ESpec.DocTest, only: [doctest: 1, doctest: 2]
import ESpec.Expect
use ESpec.Expect
import ESpec.To
import ESpec.Should
use ESpec.Should
import ESpec.AssertionHelpers
import ESpec.Allow
import ESpec.Before
import ESpec.Finally
import ESpec.Let
import ExUnit.CaptureIO
use ESpec.DescribedModule
end
end
defmacro __before_compile__(_env) do
quote do
def examples, do: Enum.reverse(@examples)
def defined_lets, do: @defined_lets
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
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
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)
end