lib/adhearsion/tasks/testing.rb in adhearsion-1.1.1 vs lib/adhearsion/tasks/testing.rb in adhearsion-1.2.0

- old
+ new

@@ -1,27 +1,58 @@ -namespace:test do +begin + require 'rspec/core/rake_task' +rescue LoadError +end + +desc 'Run app tests, including components' +task :test => 'test:component' + +desc 'Run app specs, including components' +task :spec => :test + +namespace :test do desc "Run tests for a component specified by COMPONENT=<component_name>. If no component is specified, tests will be executed for all components" task :component do component = ENV['COMPONENT'] components_to_test = component.nil? ? all_component_directories : [full_path_for(component)] components_to_test.each do |component_name| - setup_and_execute(component_name) + setup_and_execute component_name end end private def setup_and_execute(component_path) task = create_test_task_for(component_path) - Rake::Task[task.name].execute + Rake::Task[task.name].execute if task end def create_test_task_for(component_path) - Rake::TestTask.new(task_name_for(component_path)) do |t| - t.libs = ["lib", "test"].map{|subdir| File.join(component_path, subdir)} - t.test_files = FileList["#{component_path}/test/test_*.rb"] - t.verbose = true - end + case task_type_for(component_path) + when :test_unit + Rake::TestTask.new task_name_for(component_path) do |t| + t.libs = ["lib", "test"].map { |subdir| File.join component_path, subdir } + t.test_files = FileList["#{component_path}/test/test_*.rb"] + t.verbose = true + end + when :rspec + if defined?(RSpec) + RSpec::Core::RakeTask.new task_name_for(component_path) do |spec| + spec.pattern = "#{component_path}/spec/**/*_spec.rb" + spec.rspec_opts = '--color' + end + else + puts "It looks like you have components with RSpec tests. You can run them by adding RSpec to your Gemfile." + end + end + end + + def task_type_for(component_path) + if Dir.exists?("#{component_path}/test") + :test_unit + elsif Dir.exists?("#{component_path}/spec") + :rspec + end end def task_name_for(component_path) "test_#{component_path.split(/\//).last}" end \ No newline at end of file