Sha256: e2b70c480012d187615381fbb4d1b4bc7d4a3cf137f464f6098d6a3cc594df85
Contents?: true
Size: 1.56 KB
Versions: 1
Compression:
Stored size: 1.56 KB
Contents
# encoding: utf-8 require 'spec_helper' describe Equalizer, '#included' do subject { descendant.instance_exec(object) { |mod| include mod } } let(:object) { described_class.new } let(:descendant) { Class.new } let(:superclass) { described_class.superclass } before do # Prevent Module.included from being called through inheritance described_class::Methods.stub(:included) end around do |example| # Restore included method after each example superclass.class_eval do alias_method :original_included, :included example.call undef_method :included alias_method :included, :original_included end end it 'delegates to the superclass #included method' do # This is the most succinct approach I could think of to test whether the # superclass#included method is called. All of the built-in rspec helpers # did not seem to work for this. included = false superclass.class_eval do define_method(:included) do |_| # Only set the flag when an Equalizer instance is included. # Otherwise, other module includes (which get triggered internally # in RSpec when `change` is used for the first time, since it uses # autoloading for its matchers) will wrongly set this flag. included = true if self.is_a?(Equalizer) end end expect { subject }.to change { included }.from(false).to(true) end it 'includes methods into the descendant' do subject expect(descendant.included_modules).to include(described_class::Methods) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
equalizer-0.0.10 | spec/unit/equalizer/included_spec.rb |