-
-
Save justinko/1511607 to your computer and use it in GitHub Desktop.
Avdi Grimm's creation, pulled from Objects on Rails
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module ModuleStubbing | |
def stubbed_modules | |
@stubbed_modules ||= [] | |
end | |
def stub_module(full_name) | |
most_shallow_stubbed_module = nil | |
full_name.to_s.split(/::/).inject(Object) do |context, name| | |
begin | |
context.const_get(name) | |
rescue NameError | |
most_shallow_stubbed_module ||= [context, name] | |
context.const_set(name, Module.new) | |
end | |
end.tap do | |
if most_shallow_stubbed_module | |
stubbed_modules << most_shallow_stubbed_module | |
end | |
end | |
end | |
def cleanup_stub_modules | |
stubbed_modules.each do |(context, name)| | |
context.send(:remove_const, name) | |
end | |
end | |
end | |
include ModuleStubbing | |
RSpec.configure do |c| | |
c.after(:each) { cleanup_stub_modules } | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A simple
include Bar
inFoo
will require you to usestub_module('Bar')
in the top level. One way to avoidstub_module
is toinclude
it like so:But then you're adding test specific logic into the implementation code :(
Not going to be an option. Currently, this suite takes 11 minutes to run. My goal is to have the capybara specs be the only "full stack" specs.