otuv

otuv

Hi,

How would one make a test that asserts that the tested method is invalid?

If i for example want to test the following (somewhat contrived) method:

def only_valid_number(number) when is_number number do
  number
end

A simple success test is trivial:

assert 5 == only_valid_number(5)

But what if I want to verify that:

assert ‘got stacktrace’ == only_valid_number(“5”)

Where I don’t really care why, just that any attempts to use it in this way will fail.

Showing Posts 1 to 7

otuv

otuv OP

As I do guess this is as close to the right answer I will get it is (unfortunately) not what I’m after. The difference being that, as far as I understand, there is no way to not specify which exception specifically to expect.

I would like to find a way to just throw stuff it should not except at the function and then rest assured that I did crash in a controlled way.

As I see it if you specify an expected exception a bit of the Erlang magic is gone when you have to predict the exact behavior and thus only cover one of all the (infinite) possible errors.

otuv

otuv OP

Perhaps I should rephrase my vision as:

assert failure == only_valid_number(“5”)

where failure is anything that does not return a valid response

arjan

arjan

You could use flunk instead to check that the execution does not reach a certain point:

try do
  only_valid_number("x")
  flunk("this should not have happened")
catch
  _, _ -> :ok 
end
otuv

otuv OP

To bad you have to wrap it in stuff but this is it.

arjan

arjan

My suggestion was not entirely right. You could write a expect_failure macro like this:

defmodule ExpectFailure do
  defmacro expect_failure(ast) do
    quote do
      try do
        unquote(ast)
        flunk("This should has crashed: " <> unquote(Macro.to_string(ast)))
      rescue
        e in ExUnit.AssertionError ->
          raise e

        _ ->
          :ok
      end
    end
  end
end

defmodule AsdfTest do
  use ExUnit.Case
  doctest Asdf
  import ExpectFailure

  def foo(x) when is_number(x) do
    x + 1
  end

  test "expect_failure catches errors" do
    expect_failure(foo("a"))
  end

  test "expect_failure should crash" do
    assert_raise ExUnit.AssertionError, fn ->
      expect_failure(foo(1))
    end
  end
end
devonestes

devonestes

This was a good idea! I’ve added it to the new version (0.15.0) and just published it to hex: assertions | Hex
Assertions — Assertions v0.15.0

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews