diff --git a/Library/Homebrew/test/cleanup_spec.rb b/Library/Homebrew/test/cleanup_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b0e8247672626bf399658ef632a64966c633f546
--- /dev/null
+++ b/Library/Homebrew/test/cleanup_spec.rb
@@ -0,0 +1,130 @@
+require "test/support/fixtures/testball"
+require "cleanup"
+require "fileutils"
+require "pathname"
+
+describe Homebrew::Cleanup do
+  let(:ds_store) { Pathname.new("#{HOMEBREW_PREFIX}/Library/.DS_Store") }
+
+  around(:each) do |example|
+    begin
+      FileUtils.touch ds_store
+
+      example.run
+    ensure
+      FileUtils.rm_f ds_store
+    end
+  end
+
+  describe "::cleanup" do
+    it "removes .DS_Store files" do
+      shutup do
+        described_class.cleanup
+      end
+
+      expect(ds_store).not_to exist
+    end
+
+    it "doesn't remove anything if `--dry-run` is specified" do
+      ARGV << "--dry-run"
+
+      shutup do
+        described_class.cleanup
+      end
+
+      expect(ds_store).to exist
+    end
+  end
+
+  specify "::cleanup_formula" do
+    f1 = Class.new(Testball) do
+      version "1.0"
+    end.new
+
+    f2 = Class.new(Testball) do
+      version "0.2"
+      version_scheme 1
+    end.new
+
+    f3 = Class.new(Testball) do
+      version "0.3"
+      version_scheme 1
+    end.new
+
+    f4 = Class.new(Testball) do
+      version "0.1"
+      version_scheme 2
+    end.new
+
+    shutup do
+      [f1, f2, f3, f4].each do |f|
+        f.brew do
+          f.install
+        end
+
+        Tab.create(f, DevelopmentTools.default_compiler, :libcxx).write
+      end
+    end
+
+    expect(f1).to be_installed
+    expect(f2).to be_installed
+    expect(f3).to be_installed
+    expect(f4).to be_installed
+
+    shutup do
+      described_class.cleanup_formula f3
+    end
+
+    expect(f1).not_to be_installed
+    expect(f2).not_to be_installed
+    expect(f3).to be_installed
+    expect(f4).to be_installed
+  end
+
+  specify "::cleanup_logs" do
+    path = (HOMEBREW_LOGS/"delete_me")
+    path.mkpath
+    ARGV << "--prune=all"
+
+    shutup do
+      described_class.cleanup_logs
+    end
+
+    expect(path).not_to exist
+  end
+
+  describe "::cleanup_cache" do
+    it "cleans up incomplete downloads" do
+      incomplete = (HOMEBREW_CACHE/"something.incomplete")
+      incomplete.mkpath
+
+      shutup do
+        described_class.cleanup_cache
+      end
+
+      expect(incomplete).not_to exist
+    end
+
+    it "cleans up 'java_cache'" do
+      java_cache = (HOMEBREW_CACHE/"java_cache")
+      java_cache.mkpath
+
+      shutup do
+        described_class.cleanup_cache
+      end
+
+      expect(java_cache).not_to exist
+    end
+
+    it "cleans up 'npm_cache'" do
+      npm_cache = (HOMEBREW_CACHE/"npm_cache")
+      npm_cache.mkpath
+
+      shutup do
+        described_class.cleanup_cache
+      end
+
+      expect(npm_cache).not_to exist
+    end
+  end
+end
diff --git a/Library/Homebrew/test/cleanup_test.rb b/Library/Homebrew/test/cleanup_test.rb
deleted file mode 100644
index bc7a6713c67ed8d098fc39ef5effc9e30702f173..0000000000000000000000000000000000000000
--- a/Library/Homebrew/test/cleanup_test.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require "testing_env"
-require "test/support/fixtures/testball"
-require "cleanup"
-require "fileutils"
-require "pathname"
-require "testing_env"
-
-class CleanupTests < Homebrew::TestCase
-  def setup
-    super
-    @ds_store = Pathname.new "#{HOMEBREW_PREFIX}/Library/.DS_Store"
-    FileUtils.touch @ds_store
-  end
-
-  def teardown
-    FileUtils.rm_f @ds_store
-    super
-  end
-
-  def test_cleanup
-    shutup { Homebrew::Cleanup.cleanup }
-    refute_predicate @ds_store, :exist?
-  end
-
-  def test_cleanup_dry_run
-    ARGV << "--dry-run"
-    shutup { Homebrew::Cleanup.cleanup }
-    assert_predicate @ds_store, :exist?
-  end
-
-  def test_cleanup_formula
-    f1 = Class.new(Testball) do
-      version "1.0"
-    end.new
-    f2 = Class.new(Testball) do
-      version "0.2"
-      version_scheme 1
-    end.new
-    f3 = Class.new(Testball) do
-      version "0.3"
-      version_scheme 1
-    end.new
-    f4 = Class.new(Testball) do
-      version "0.1"
-      version_scheme 2
-    end.new
-
-    shutup do
-      [f1, f2, f3, f4].each do |f|
-        f.brew { f.install }
-        Tab.create(f, DevelopmentTools.default_compiler, :libcxx).write
-      end
-    end
-
-    assert_predicate f1, :installed?
-    assert_predicate f2, :installed?
-    assert_predicate f3, :installed?
-    assert_predicate f4, :installed?
-
-    shutup { Homebrew::Cleanup.cleanup_formula f3 }
-
-    refute_predicate f1, :installed?
-    refute_predicate f2, :installed?
-    assert_predicate f3, :installed?
-    assert_predicate f4, :installed?
-  end
-
-  def test_cleanup_logs
-    path = (HOMEBREW_LOGS/"delete_me")
-    path.mkpath
-    ARGV << "--prune=all"
-    shutup { Homebrew::Cleanup.cleanup_logs }
-    refute_predicate path, :exist?
-  end
-
-  def test_cleanup_cache_incomplete_downloads
-    incomplete = (HOMEBREW_CACHE/"something.incomplete")
-    incomplete.mkpath
-    shutup { Homebrew::Cleanup.cleanup_cache }
-    refute_predicate incomplete, :exist?
-  end
-
-  def test_cleanup_cache_java_cache
-    java_cache = (HOMEBREW_CACHE/"java_cache")
-    java_cache.mkpath
-    shutup { Homebrew::Cleanup.cleanup_cache }
-    refute_predicate java_cache, :exist?
-  end
-
-  def test_cleanup_cache_npm_cache
-    npm_cache = (HOMEBREW_CACHE/"npm_cache")
-    npm_cache.mkpath
-    shutup { Homebrew::Cleanup.cleanup_cache }
-    refute_predicate npm_cache, :exist?
-  end
-end