1
0
Fork 0
mirror of https://github.com/awesome-print/awesome_print synced 2023-03-27 23:22:34 -04:00
awesome_print/spec/spec_helper.rb
Gerard Caulfield 9d63f12f93
Update to latest code climate method
According to the code climate docs we should no longer call their
runner at the top of our spec file and instead load simplecov.
Travis will then handle passing on the simplecov files to codecov.
2016-11-05 23:15:27 +11:00

100 lines
2.9 KiB
Ruby

# Copyright (c) 2010-2016 Michael Dvorkin and contributors
#
# Awesome Print is freely distributable under the terms of MIT license.
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
#------------------------------------------------------------------------------
#
# Running specs from the command line:
# $ rake spec # Entire spec suite.
# $ rspec spec/objects_spec.rb # Individual spec file.
#
# NOTE: To successfully run specs with Ruby 1.8.6 the older versions of
# Bundler and RSpec gems are required:
#
# $ gem install bundler -v=1.0.2
# $ gem install rspec -v=2.6.0
#
require 'simplecov'
SimpleCov.start
$LOAD_PATH.unshift(File.dirname(__FILE__))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each do |file|
require file
end
ExtVerifier.require_dependencies!(
%w(
rails
active_record
action_view
active_support/all
mongoid
mongo_mapper
ripple nobrainer
)
)
require 'nokogiri'
require 'awesome_print'
RSpec.configure do |config|
config.disable_monkey_patching!
# TODO: Make specs not order dependent
# config.order = :random
Kernel.srand config.seed
config.filter_run focus: true
config.run_all_when_everything_filtered = true
config.expect_with :rspec do |expectations|
expectations.syntax = :expect
end
config.mock_with :rspec do |mocks|
mocks.syntax = :expect
mocks.verify_partial_doubles = true
end
config.default_formatter = 'doc' if config.files_to_run.one?
# Run before all examples. Using suite or all will not work as stubs are
# killed after each example ends.
config.before(:each) do |_example|
stub_dotfile!
end
end
# This matcher handles the normalization of objects to replace non deterministic
# parts (such as object IDs) with simple placeholder strings before doing a
# comparison with a given string. It's important that this method only matches
# a string which strictly conforms to the expected object ID format.
RSpec::Matchers.define :be_similar_to do |expected, options|
match do |actual|
options ||= {}
@actual = normalize_object_id_strings(actual, options)
values_match? expected, @actual
end
diffable
end
# Override the Object IDs with a placeholder so that we are only checking
# that an ID is present and not that it matches a certain value. This is
# necessary as the Object IDs are not deterministic.
def normalize_object_id_strings(str, options)
str = str.gsub(/#<(.*?):0x[a-f\d]+/, '#<\1:placeholder_id') unless options[:skip_standard]
str = str.gsub(/BSON::ObjectId\('[a-f\d]{24}'\)/, 'placeholder_bson_id') unless options[:skip_bson]
str
end
def stub_dotfile!
allow_any_instance_of(AwesomePrint::Inspector)
.to receive(:load_dotfile)
.and_return(true)
end
def capture!
standard = $stdout
$stdout = StringIO.new
yield
ensure
$stdout = standard
end