Testing Vagrant runs with Cucumber
Mar 15, 2014 · 2 minute readI’ve been a big fan of Vagrant since it’s initial release and still find myself using it for various tasks.
Recently I’ve been using it to test collections of Puppet modules. For a single host vagrant-serverspec is excellent. Simply install the plugin, add a provisioner and write your serverspec tests. The serverspec provisioner looks like the following:
config.vm.provision :serverspec do |spec|
spec.pattern = '*_spec.rb'
endBut I also found myself wanting to test behaviour from the host (serverspec tests are run on the guest), and also wanted to write tests that checked the behaviour of a multi-box setup. I started by simply writing some Cucumber tests which I ran locally, but I decided I wanted this integrated with vagrant. Enter vagrant-cucumber-host. This implements a new vagrant provisioner which runs a set of cucumber features locally.
config.vm.provision :cucumber do |cucumber|
cucumber.features = []
endJust drop your features in the features folder and run vagrant
provision. If you just want to run the cucumber features, without any
of the other provisioners running you can use:
vagrant provision --provision-with cucumberAnother advantage of writing this as a vagrant plugin is that it uses the Ruby bundled with vagrant, meaning you just install the plugin rather than faff about with a local Ruby install.
A couple of other vagrant plugins that I’ve used to make the testing setup easier are vagrant-hostsupdater and vagrant-hosts. Both help with managing hosts files, which makes writing tests without knowing the IP addresses easier.