How to name RSpec describe blocks for methods

So far our convention has been

  describe :method_name do 
    ...
  end

But this has some obvious drawback like separation of instance/class methods.
I hope we can now all agree on the unambiguous convention Mr Heinrich found in a great rspec presentation:

  • use “description” for non-methods
  • use pound “#method” for instance methods
  • use dot “.method” for class methods

This also makes prettier specdoc output πŸ™‚

Speeding up Slow Spork Startup for Rails 2.3+

If you noticed spork startup getting slower when switching to Rails 2.3, your not alone πŸ˜‰

  • Views are eager loaded
  • app/ is eager loaded (when config.cache_classes is on)

Without hack: 18s startup
With hack: 2s startup πŸ˜€

Try it

#spec/spec_helper.rb
require 'spork/app_framework/rails'
Spork::AppFramework::Rails::NinjaPatcher.class_eval do
  # views are preloaded  spork must be restarted for view changes
  def delay_eager_view_loading
    puts "removed because i am too slow..."
  end

  # do not preload application files
  # alternatively urn off config.cache_classes
  def delay_app_preload
    ::Rails::Initializer.send(:define_method, :load_application_classes){}
  end
end


Spork.prefork do
  ...

Stop spec_helper from being loaded multiple times

If you got a big project, chances are spec_helper is required through different ways, File.expand_path / File.join() / … which results in it being loaded several times!

Try it:

#spec_helper.rb
print "YEP!"

rake spec -> “YEP!YEP!YEP!YEP!YEP!YEP!YEP!YEP!……”

So how to prevent it ?

Unify!
Unify it to ‘spec_helper’ for rspec or ‘./spec/spec_helper’ for minitest, which can be copied without modification (like adding ‘../../’) and prevents duplicate spec_helper calls

#unify_spec_helper.rb
files = Dir["spec/**/*_spec.rb"].reject{|file|File.directory?(file)}
files.each do |file|
  lines = File.readlines(file)
  lines = lines.map do |line|
    if line =~ /require.*spec_helper/
      "require 'spec_helper'\n"
    else
      line
    end
  end
  File.open(file,'w'){|f| f.write lines.join('') }
end

Run: ruby unify_spec_helper.rb