RSpec with Domino
by Nick Gauthier on
Using Domino with RSpec is awesome. I’ll let the code speak for itself.
We have an html page:
<!doctype html> <html> <head> <title>Domino Rspec</title> </head> <body> <h1>Domino Rspec</h1> <ul> <li><span class='name'>John Doe</span> Age <span class='age'>47</span></li> <li><span class='name'>Jane Doe</span> Age <span class='age'>37</span></li> <li><span class='name'>Jim Doe</span> Age <span class='age'>27</span></li> </ul> </body> </html>
And here is an rspec request spec to test the data:
describe :index_without_domino, :type => :request do before do visit '/' end it 'should have three people' do page.all('ul li').count.should == 3 end context 'John Doe' do subject do page.all('ul li').find do |node| node.find('.name').text == 'John Doe' end end it 'should have an age of 47' do subject.find('.age').text.should == '47' end end end
CSS selectors are brittle here, and it’s not very rubyish. It’s full of html! First, we’ll make a domino:
module Dom class Person < Domino selector 'ul li' attribute :name attribute :age end end
And then update our test:
describe :index, :type => :request do before do visit '/' end it 'should have three people' do Dom::Person.count.should == 3 end context 'John Doe' do subject { Dom::Person.find_by_name 'John Doe' } its(:age) { should == '47' } end end
Because dominos are enumerable ruby objects, we can count them easily. There’s also handy attribute finders and accessors. So, a domino can be an rspec subject. Much better!
blog comments powered by Disqus