def port_test_to_spec(fname, dir) spec = convert_test_to_spec(File.read(fname)) spec_dir = "#{RAILS_ROOT}/spec/#{dir}" FileUtils.mkdir_p(spec_dir) spec_name = fname.match(/([^\/]+)_test\.rb/)[1] spec_fname = "#{spec_dir}/#{spec_name}_spec.rb" puts "Porting #{fname} to #{spec_fname}" File.open(spec_fname, "w") do |f| f.write spec end end def convert_test_to_spec(test) test.gsub!(/test_helper/, 'spec_helper') test.gsub!(/class ([A-Za-z0-9]+)Test < .+$/, 'describe \\1 do') test.gsub!(/def test_([a-z0-9_]+)/, 'it "tests \\1" do') test.gsub!(/def setup/, 'before(:each) do') test.gsub!(/def teardown/, 'after(:each) do') test end namespace :test do namespace :port do desc "Port your tests to rspec specs" task :spec do Dir["#{RAILS_ROOT}/test/unit/*_test.rb"].each do |fname| port_test_to_spec(fname, 'models') end end end end