praveenperera

praveenperera

Wallaby vs Hound?

Theres a new tool for acceptance testing called Wallaby, I was wondering if anyone has experience with it. I was specifically wondering how it compares to Hound, as that’s what I am using right now.

From this blog post it seems like it might be faster because it takes advantage of Ecto 2.0 features and runs all the tests concurrently?

Most Liked

keathley

keathley

Sorry for the late reply. I’ve been traveling for a few days.

Hound and Wallaby are similar in a lot of ways but different in a few key areas. I’ll try to break down what I think are the key differences and highlight why we wanted to build Wallaby in the first place.

Api

This is the biggest difference between the two libraries. Both Wallaby and Hound use Webdriver to talk with the browser. So under the hood its using a lot of the same functionality. The key differences are in the developer experience.

Wallaby’s api was designed in the same spirit of Capybara’s api. It defaults to finding elements by css and allows you to interact with form elements by their label text, name, or id. Under the hood it uses xpath to do more these dynamic selections. This allows you to write interactions like:

find(".user_form")
|> fill_in("First Name", with: "Chris")
|> fill_in("last_name", with: "Keathley")

I find that writing tests in this way conveys more meaning in your tests both for yourself and other people working with you.

By default, Wallaby will only allow you to interact with elements that a user would see. If a element exists on the page, but its not visible to a user Wallaby will block until it either becomes visible or until it times out and raises an error.

Hound’s api is a bit more explicit then Wallaby’s. For instance with finders you specify the “strategy” that you want to use to select elements on the page:

find_element(:name, "message")
find_element(:css, ".message")
submit_element(element)

As far as I know Hound will allow you to select any element on the page even if its not visible to the user. I hope that HashNuke or tuvistavie will correct me if I’m wrong about this.

Browsers

Wallaby (currently) only supports PhantomJS. However, we manage Phantoms for you. When Wallaby starts up we start a pool of Phantoms. Each test case checks out one of the Phantoms before it runs. That way we get test isolation between browsers and don’t pay startup costs for starting and stopping phantom.

Hound supports multiple browser tools (Selenium, PhantomJS, etc.). However it doesn’t manage any of these for you. You have to start up the driver and tell Hound what you’re using.

Concurrency

Wallaby and Hound BOTH support concurrent tests with Phoenix using the SQL Sandbox plug in phoenix_ecto. The difference is that Wallaby uses multiple browsers simultaneously. I haven’t benchmarked Hound and Wallaby so I can’t speak to the relative performance benefits of either.

There are pros and cons to both tools. I have a ton of respect for the work that HashNuke and tuvistavie are doing. Neither tool is necessarily better. They just have different design goals and opinions. I recommend that you check out both of them and go with the one that makes the most sense for you and your team.

25
Post #4
keathley

keathley

Totally! In fact the majority of applications I’ve worked on with Wallaby have been large JS clients in front of a phoenix api.

AstonJ

AstonJ

@keathley is a member here so hopefully he will spot this and add his thoughts :003:

Where Next?

Popular in Questions Top

9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
earth10
Hi, I’m just starting to build a side-project with Elixir and Phoenix and doing some basic test with Elixir alone. What strikes me is th...
New
chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
vegabook
I'm brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New

Other popular topics Top

9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30840 112
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

We're in Beta

About us Mission Statement