[rspec-users] [Code Style] Is there a more 'rspec' way for me to write this test?

Ben Buckley l3moncurd at gmail.com
Fri May 28 04:23:39 EDT 2010


Morning all,

I have been playing with Ruby/RSpec on a small script to try and get to know the language and its idioms. 

I have got my tests working and removed some duplication, but I am conscious the code looks quite Java-like in its style. 
I would appreciate it if some of the seasoned rspecers on this mailing list might be able to take a look and give any suggestions on how it could be more ruby-like?

Overview: 
TeamCalendar interacts with a Website object to determine if a person had some activity on a particular day. 
The Website object uses Watir to interact with a real website (pulled into a separate class because I couldn't work out how to test it).

describe TeamCalendar  do
  before do
    @mock_website = stub("the website").as_null_object
    @builder = TeamBuilder.new(@mock_website).member("Ben")
    @hronline = TeamCalendar.new(@mock_website,"Ben")
  end

  it "should return :normal when no calendar entries exist" do
    @hronline.dayType("6/27").should == :normal
  end
 
  it "should return :public_holiday when website shows a bank holiday" do
      @builder.member("Ben").withCalendarEntry("6/25","holiday.jpg")
      @hronline.dayType("6/25").should == :public_holiday
  end

  it "should return :public_holiday when any other team member shows bank holiday" do
    @builder.member("Ben").withCalendarEntry("1/4","vacation.jpg")
    @builder.member("Dave").withCalendarEntry("1/4","holiday.jpg")
    @hronline.dayType("1/4").should == :public_holiday
  end
end

class TeamBuilder
  def initialize(mock_website)
    @team = []
    @website = mock_website
    @website.stub!(:team).and_return(@team)
  end
 
  def member(name)
    @name = name
    @team.push(name) if !@team.include?(name)
    self
  end

  def withCalendarEntry(day, type)
    @website.stub!(:imageShownOnDay).with(day, at name).and_return(type)
  end
end


Thanks,
-Ben


More information about the rspec-users mailing list