Wallaby.Feature (wallaby v0.28.0) View Source

Helpers for writing features.

You can use or import this module.

use Wallaby.Feature

Calling this module with use will automatically call use Wallaby.DSL.

When called with use and you are using Ecto, please configure your otp_app.

config :wallaby, otp_app: :your_app

Link to this section Summary

Link to this section Functions

Link to this macro

feature(message, context \\ quote do _ end, contents)

View Source (macro)

Defines a feature with a message.

Adding import Wallaby.Feature to your test module will import the Wallaby.Feature.feature/3 macro. This is a drop in replacement for the ExUnit.Case.test/3 macro that you normally use.

Adding use Wallaby.Feature to your test module will act the same as import Wallaby.Feature, as well as configure your Ecto repos properly and pass a Wallaby.Session into the test context.


When called with use, the Wallaby.Feature.feature/3 macro will automatically start a single session using the currently configured capabilities and is passed to the feature via the :session key in the context.

feature "test with a single session", %{session: session} do
  # ...

If you would like to start multiple sessions, assign the @sessions attribute to the number of sessions that the feature should start, and they will be pass to the feature via the :sessions key in the context.

@sessions 2
feature "test with a two sessions", %{sessions: [session_1, sessions_2]} do
  # ...

If you need to change the capabilities sent to the session for a specific feature, you can assign @sessions to a list of keyword lists of the options to be passed to Wallaby.start_session/1. This will start the number of sessions equal to the size of the list.

@sessions [
  [capabilities: %{}]
feature "test with different capabilities", %{session: session} do
  # ...

If you don't wish to use Wallaby.Feature in your test module, you can add the following code to configure Ecto and create a session.

setup tags do
  :ok = Ecto.Adapters.SQL.Sandbox.checkout(YourApp.Repo)

  unless tags[:async] do
    Ecto.Adapters.SQL.Sandbox.mode(YourApp.Repo, {:shared, self()})

  metadata = Phoenix.Ecto.SQL.Sandbox.metadata_for(YourApp.Repo, self())
  {:ok, session} = Wallaby.start_session(metadata: metadata)

  {:ok, session: session}


If you have configured screenshot_on_failure to be true, any exceptions raised during the feature will trigger a screenshot to be taken.