rspec.rake
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:6k
源码类别:

Ajax

开发平台:

Others

  1. gem 'test-unit', '1.2.3' if RUBY_VERSION.to_f >= 1.9
  2. rspec_plugin_dir = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec')
  3. $LOAD_PATH.unshift("#{rspec_plugin_dir}/lib") if File.exist?(rspec_plugin_dir)
  4. # Don't load rspec if running "rake gems:*"
  5. unless ARGV.any? {|a| a =~ /^gems/}
  6. begin
  7.   require 'spec/rake/spectask'
  8. rescue MissingSourceFile
  9.   module Spec
  10.     module Rake
  11.       class SpecTask
  12.         def initialize(name)
  13.           task name do
  14.             # if rspec-rails is a configured gem, this will output helpful material and exit ...
  15.             require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
  16.             # ... otherwise, do this:
  17.             raise <<-MSG
  18. #{"*" * 80}
  19. *  You are trying to run an rspec rake task defined in
  20. *  #{__FILE__},
  21. *  but rspec can not be found in vendor/gems, vendor/plugins or system gems.
  22. #{"*" * 80}
  23. MSG
  24.           end
  25.         end
  26.       end
  27.     end
  28.   end
  29. end
  30. Rake.application.instance_variable_get('@tasks').delete('default')
  31. spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
  32. task :noop do
  33. end
  34. task :default => :spec
  35. task :stats => "spec:statsetup"
  36. desc "Run all specs in spec directory (excluding plugin specs)"
  37. Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
  38.   t.spec_opts = ['--options', ""#{RAILS_ROOT}/spec/spec.opts""]
  39.   t.spec_files = FileList['spec/**/*/*_spec.rb']
  40. end
  41. namespace :spec do
  42.   desc "Run all specs in spec directory with RCov (excluding plugin specs)"
  43.   Spec::Rake::SpecTask.new(:rcov) do |t|
  44.     t.spec_opts = ['--options', ""#{RAILS_ROOT}/spec/spec.opts""]
  45.     t.spec_files = FileList['spec/**/*/*_spec.rb']
  46.     t.rcov = true
  47.     t.rcov_opts = lambda do
  48.       IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
  49.     end
  50.   end
  51.   desc "Print Specdoc for all specs (excluding plugin specs)"
  52.   Spec::Rake::SpecTask.new(:doc) do |t|
  53.     t.spec_opts = ["--format", "specdoc", "--dry-run"]
  54.     t.spec_files = FileList['spec/**/*/*_spec.rb']
  55.   end
  56.   desc "Print Specdoc for all plugin examples"
  57.   Spec::Rake::SpecTask.new(:plugin_doc) do |t|
  58.     t.spec_opts = ["--format", "specdoc", "--dry-run"]
  59.     t.spec_files = FileList['vendor/plugins/**/spec/**/*/*_spec.rb'].exclude('vendor/plugins/rspec/*')
  60.   end
  61.   [:models, :controllers, :views, :helpers, :lib].each do |sub|
  62.     desc "Run the code examples in spec/#{sub}"
  63.     Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
  64.       t.spec_opts = ['--options', ""#{RAILS_ROOT}/spec/spec.opts""]
  65.       t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
  66.     end
  67.   end
  68.   desc "Run the code examples in vendor/plugins (except RSpec's own)"
  69.   Spec::Rake::SpecTask.new(:plugins => spec_prereq) do |t|
  70.     t.spec_opts = ['--options', ""#{RAILS_ROOT}/spec/spec.opts""]
  71.     t.spec_files = FileList['vendor/plugins/**/spec/**/*/*_spec.rb'].exclude('vendor/plugins/rspec/*').exclude("vendor/plugins/rspec-rails/*")
  72.   end
  73.   namespace :plugins do
  74.     desc "Runs the examples for rspec_on_rails"
  75.     Spec::Rake::SpecTask.new(:rspec_on_rails) do |t|
  76.       t.spec_opts = ['--options', ""#{RAILS_ROOT}/spec/spec.opts""]
  77.       t.spec_files = FileList['vendor/plugins/rspec-rails/spec/**/*/*_spec.rb']
  78.     end
  79.   end
  80.   # Setup specs for stats
  81.   task :statsetup do
  82.     require 'code_statistics'
  83.     ::STATS_DIRECTORIES << %w(Model specs spec/models) if File.exist?('spec/models')
  84.     ::STATS_DIRECTORIES << %w(View specs spec/views) if File.exist?('spec/views')
  85.     ::STATS_DIRECTORIES << %w(Controller specs spec/controllers) if File.exist?('spec/controllers')
  86.     ::STATS_DIRECTORIES << %w(Helper specs spec/helpers) if File.exist?('spec/helpers')
  87.     ::STATS_DIRECTORIES << %w(Library specs spec/lib) if File.exist?('spec/lib')
  88.     ::STATS_DIRECTORIES << %w(Routing specs spec/routing) if File.exist?('spec/routing')
  89.     ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models')
  90.     ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views')
  91.     ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers')
  92.     ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers')
  93.     ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib')
  94.     ::CodeStatistics::TEST_TYPES << "Routing specs" if File.exist?('spec/routing')
  95.   end
  96.   namespace :db do
  97.     namespace :fixtures do
  98.       desc "Load fixtures (from spec/fixtures) into the current environment's database.  Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z."
  99.       task :load => :environment do
  100.         ActiveRecord::Base.establish_connection(Rails.env)
  101.         base_dir = File.join(Rails.root, 'spec', 'fixtures')
  102.         fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
  103.         
  104.         require 'active_record/fixtures'
  105.         (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
  106.           Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
  107.         end
  108.       end
  109.     end
  110.   end
  111.   namespace :server do
  112.     daemonized_server_pid = File.expand_path("#{RAILS_ROOT}/tmp/pids/spec_server.pid")
  113.     
  114.     desc "start spec_server."
  115.     task :start do
  116.       if File.exist?(daemonized_server_pid)
  117.         $stderr.puts "spec_server is already running."
  118.       else
  119.         $stderr.puts %Q{Starting up spec_server ...}
  120.         FileUtils.mkdir_p('tmp/pids') unless test ?d, 'tmp/pids'
  121.         system("ruby", "script/spec_server", "--daemon", "--pid", daemonized_server_pid)
  122.       end
  123.     end
  124.     desc "stop spec_server."
  125.     task :stop do
  126.       unless File.exist?(daemonized_server_pid)
  127.         $stderr.puts "No server running."
  128.       else
  129.         $stderr.puts "Shutting down spec_server ..."
  130.         system("kill", "-s", "TERM", File.read(daemonized_server_pid).strip) && 
  131.         File.delete(daemonized_server_pid)
  132.       end
  133.     end
  134.     desc "restart spec_server."
  135.     task :restart => [:stop, :start]
  136.     
  137.     desc "check if spec server is running"
  138.     task :status do
  139.       if File.exist?(daemonized_server_pid)
  140.         $stderr.puts %Q{spec_server is running (PID: #{File.read(daemonized_server_pid).gsub("n","")})}
  141.       else
  142.         $stderr.puts "No server running."
  143.       end
  144.     end
  145.   end
  146. end
  147. end