Running Integration Tests With Capybara/Webkit

Apr 03, 2012
F6d5456c21f0a510b385117a66e8c5fa

Have you ever had a big Ruby app where your tests are too complex with all those @javascript tagst that testing takes like.... forever?

Then, you should try Capybara/Webkit, a library that provides a webkit-powered driver for your integration tests using the webkit implementation in Qt.

The first step to get this done is to install the Qt libraires.

You can use this command if you are using Linux

sudo apt-get install libqt4-dev

Or this other one if you are using Mac OS

brew install qt

It might take a while, so... you may want to get a cup of coffee.

After that cup of coffee, if you are running under Linux platforms, capybara-webkit requires an X server to run, although it doesn't create any visible windows. Xvfb works fine for this you can install it by typing

sudo apt-get install xvfb

To finish with the installation add the following to your app Gemfile then run bundle.

gem 'capybara-webkit'

Once everything is installed you can set Capybara's Javascript driver to use webkit by default, to do this just open your /features/support/env.rb and add the following line:

Capybara.javascript_driver = :webkit

And that's it. If you are using linux as I am, use this command to run your tests

xvfb-run bundle exec cucumber

and if you are a Mac user just run your tests normally with

bundle exec cucumber

as your tests begin to run you will notice that the Firefox window won't open and all your @javascript tagged scenarios will run in the "background".

Conclusions

You'll be able to notice a speed increase running the tests with capybara-webkit instead of Selenium.

So, these are my results:

Running with selenium & firefox

6 scenarios (6 passed)
21 steps (21 passed)
0m22.937s

Running with capybara & webkit

6 scenarios (6 passed)
21 steps (21 passed)
0m16.759s

As you can see, the app I'm testing is quite simple with only 21 steps, nevertheless you can see there is a 6 seconds difference between tests.

6 seconds may not be a huge difference right now, but, as your project starts growing and growing you will notice the diffence in speed when running your tests.

You can check these references for more info.

blog comments powered byDisqus