Packages
espec
0.6.0
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.Should
use ESpec.Should
import ESpec.AssertionHelpers
import ESpec.Allow
import ESpec.Before
import ESpec.Finally
import ESpec.Let, except: [start_agent: 1, agent_get: 1, agent_put: 2]
end
end
defmacro __before_compile__(_env) do
quote do
def examples, do: Enum.reverse(@examples)
end
end
def configure(func), do: ESpec.Configuration.configure(func)
@doc "Runs the examples and prints results"
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.start_agent
ESpec.Mock.start_agent
ESpec.Output.start
end
defp start_specs_agent do
Agent.start_link(fn -> [] end, name: @spec_agent_name)
end
def specs do
Agent.get(@spec_agent_name, &(&1))
end
def add_spec(module) do
Agent.update(@spec_agent_name, &[module | &1])
end
end