# Per test
@tag :capture_log
test "something with logging" do
...
end
# Per suite
ExUnit.configure capture_log: true
Capture Log
Slide 14
Slide 14 text
Capture Log
1) test something with logging
test/plug/error.exs:59
** (RuntimeError) oops
stacktrace:
test/plug/error.exs:59
The following output was logged:
20:27:52.443 [info] log message
Slide 15
Slide 15 text
Not implemented tests
# @tag :not_implemented
test "eventually will do X"
$ mix test --exclude not_implemented
$ mix test --only not_implemented
Slide 16
Slide 16 text
• stacktrace depth is now configurable
and has been increased to 20
• More detailed errors
• Ability to skip tests
• Proper line number in doctests failures
More improvements
Build embedded (true)
• Packages your whole application
into _build (no symlinks)
• Enables protocol consolidation
• No longer automatically compiles
Slide 23
Slide 23 text
config/config.exs
# v1.0: config/config.exs
config :my_app, :key, :value
# v1.1: this will warn
config :unknown_app, :key, :value
Slide 24
Slide 24 text
• "mix compile" tracks only compile-time
dependencies for Elixir
• "recompile()" inside IEx
• Use the safer https protocol instead of
git for :github dependencies
More improvements
Elixir v1.1
# v1.0
defmodule Calculator do
use Behaviour
defcallback add(number, number) :: number
end
SOFT DEPRECATED
# v1.1
defmodule Calculator do
@callback add(number, number) :: number
end
Slide 28
Slide 28 text
Elixir v1.1
defmodule Calculator do
@typedoc "A complex number"
@opaque complex :: ...
@doc "Adds two numbers"
@callback add(number, number) :: ...
end
Code.get_docs(Calculator, :type_docs)
Slide 29
Slide 29 text
Elixir v1.1
DEPRECATED
defimpl Access, for: X do
...
end
Slide 30
Slide 30 text
Access
opts[key] opts[key] opts[key] opts[key]
Code
Server
Slide 31
Slide 31 text
• opts[key] still works
• Access defines a subset of the Dict
behaviour
• The bottleneck does not exist in prod
• Common hot-paths have been inlined
Access