Feature request: Affordances for asserting on js console output
axelson opened this issue · 2 comments
Elixir and Erlang/OTP versions
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]
Elixir 1.16.2 (compiled with Erlang/OTP 2
Operating system
macOS and Ubuntu
Browser
N/A or all
Driver
ChromeDriver
Correct Configuration
- I confirm that I have Wallaby configured correctly.
Current behavior
I'd like to be able to easily assert on the js console output in my tests. Ideally I'd be able to assert that a specific console log was output for a given step of the test.
This is kind of possible right now with CaptureIO.capture_io
but there's some drawbacks currently:
- With
js_logger
set to the defaultCaptureIO.capture_io
does capture the console output, but the console output is still printed to the terminal window thatmix test
is running in which makes it hard to read the test output - Most of the time I don't care about the console output so I'd like to be able to configure the console logging per-test so I don't need to wrap everything with
CaptureIO
- Adding a
CaptureIO
assertion for an individual step requires a helper function which breaks the flow of a test significantly, e.g. something like:
|> assert_io(
fn ->
session
|> visit(~p"/maps/#{team}/members")
end,
"members page visited"
)
the helper is small:
defp assert_io(session, fun, expected) when is_function(fun, 0) do
js_io = CaptureIO.capture_io(fun)
assert js_io =~ expected
end
Although it might be possible to workaround that with a macro (but that might feel a bit too magical)
Expected behavior
I'd like it to be easier to assert on js console output and have that documented within the library
Test Code & HTML
N/A
Demonstration Project
No response
Seems like a reasonable request and enhancement.
Another potential API is to make it so you could do something like
session
|> click(@button)
|> assert_console(~r/success/)
where assert_console
has the same "waiting" functionality that some of the other assertions have, could also have like count: 2
etc options
Yeah that would be a great UX 👍