mirror of
https://github.com/thoughtbot/shoulda-matchers.git
synced 2022-11-09 12:01:38 -05:00
3ee734bb7e
This is an effort to vastly decrease the time it takes to run a single unit test file and therefore increase productivity and happiness for people working on this project. If you want to run a unit test file, now you can use `zeus rspec` instead of `rspec` -- assuming you run `zeus start` first -- and it will run a LOT faster. Because test files tend to have long file paths, you can even use a shorter version of those paths. So instead of saying: zeus rspec spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb you can say: zeus rspec active_record/validate_uniqueness_of_matcher_spec.rb
88 lines
1.7 KiB
Ruby
88 lines
1.7 KiB
Ruby
require 'zeus/rails'
|
|
require_relative 'spec/support/tests/current_bundle'
|
|
|
|
class CustomPlan < Zeus::Plan
|
|
def initialize
|
|
super
|
|
@rails_plan = Zeus::Rails.new
|
|
end
|
|
|
|
def boot
|
|
ENV['BUNDLE_GEMFILE'] = File.expand_path(
|
|
"../gemfiles/#{latest_appraisal}.gemfile",
|
|
__FILE__
|
|
)
|
|
|
|
require 'bundler/setup'
|
|
|
|
$LOAD_PATH << File.expand_path('../lib', __FILE__)
|
|
$LOAD_PATH << File.expand_path('../spec', __FILE__)
|
|
|
|
require_relative 'spec/support/unit/load_environment'
|
|
end
|
|
|
|
def after_fork
|
|
# @rails_plan.reconnect_activerecord
|
|
end
|
|
|
|
def test_environment
|
|
require_relative 'spec/unit_spec_helper'
|
|
end
|
|
|
|
def rspec
|
|
ARGV.replace(file_paths_to_run)
|
|
RSpec::Core::Runner.invoke
|
|
end
|
|
|
|
private
|
|
|
|
def latest_appraisal
|
|
current_bundle.latest_appraisal
|
|
end
|
|
|
|
def current_bundle
|
|
Tests::CurrentBundle.instance
|
|
end
|
|
|
|
def file_paths_to_run
|
|
if given_file_paths.empty?
|
|
['spec/unit']
|
|
else
|
|
given_file_paths.map do |given_path|
|
|
determine_file_path_to_run(given_path)
|
|
end
|
|
end
|
|
end
|
|
|
|
def determine_file_path_to_run(given_rspec_argument)
|
|
expanded_file_path, location =
|
|
expand_rspec_argument(given_rspec_argument)
|
|
|
|
if File.exist?(expanded_file_path)
|
|
if location
|
|
expanded_file_path + location
|
|
else
|
|
expanded_file_path
|
|
end
|
|
else
|
|
given_rspec_argument
|
|
end
|
|
end
|
|
|
|
def expand_rspec_argument(rspec_argument)
|
|
match = rspec_argument.match(/\A(.+?)(:\d+|\[[\d:]+\])?\Z/)
|
|
file_path, location = match.captures
|
|
expanded_file_path = File.expand_path(
|
|
"../spec/unit/shoulda/matchers/#{file_path}",
|
|
__FILE__
|
|
)
|
|
|
|
[expanded_file_path, location]
|
|
end
|
|
|
|
def given_file_paths
|
|
ARGV
|
|
end
|
|
end
|
|
|
|
Zeus.plan = CustomPlan.new
|