diff --git a/spec/lib/gitlab/markdown/autolink_filter_spec.rb b/spec/lib/gitlab/markdown/autolink_filter_spec.rb
index 0bbdc11a9798f6b82c3a7f8632ac63e4f6fe09f8..a14cb2da089cdc1fe4b36e449ee882189d54bc6b 100644
--- a/spec/lib/gitlab/markdown/autolink_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/autolink_filter_spec.rb
@@ -2,11 +2,9 @@
 
 module Gitlab::Markdown
   describe AutolinkFilter do
-    let(:link) { 'http://about.gitlab.com/' }
+    include FilterSpecHelper
 
-    def filter(html, options = {})
-      described_class.call(html, options)
-    end
+    let(:link) { 'http://about.gitlab.com/' }
 
     it 'does nothing when :autolink is false' do
       exp = act = link
diff --git a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
index d3695ee46d0e6297cdb225f3b5d73eb6d0a68132..e8391cc7aca045f021c4087bc9047c124e7834ad 100644
--- a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe CommitRangeReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project) { create(:project) }
     let(:commit1) { project.commit }
diff --git a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
index a0d2cd7e22b82786ec98062688d6db14132fa998..a10d43c9a027d82ed6e53e713e50da1d35505338 100644
--- a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe CommitReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project) { create(:project) }
     let(:commit)  { project.commit }
diff --git a/spec/lib/gitlab/markdown/emoji_filter_spec.rb b/spec/lib/gitlab/markdown/emoji_filter_spec.rb
index 18d55c4818fba947685b17cfa7cf24434978fa41..11efd9bb4cd33f36205fa7d7d02d7d018ff3f42e 100644
--- a/spec/lib/gitlab/markdown/emoji_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/emoji_filter_spec.rb
@@ -2,9 +2,7 @@
 
 module Gitlab::Markdown
   describe EmojiFilter do
-    def filter(html, contexts = {})
-      described_class.call(html, contexts)
-    end
+    include FilterSpecHelper
 
     before do
       ActionController::Base.asset_host = 'https://foo.com'
diff --git a/spec/lib/gitlab/markdown/external_issue_reference_filter_spec.rb b/spec/lib/gitlab/markdown/external_issue_reference_filter_spec.rb
index bf9409589faad95023333cf09b027b11ba38ff67..f16095bc2b21b386261b9a926f1380bbe93b4ba1 100644
--- a/spec/lib/gitlab/markdown/external_issue_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/external_issue_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe ExternalIssueReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     def helper
       IssuesHelper
diff --git a/spec/lib/gitlab/markdown/external_link_filter_spec.rb b/spec/lib/gitlab/markdown/external_link_filter_spec.rb
index c2ff4f80a42b4a0348aa898271c67c1c9ef8a2e2..a040b34577b958c033bfa8fc14d6d14877192937 100644
--- a/spec/lib/gitlab/markdown/external_link_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/external_link_filter_spec.rb
@@ -2,9 +2,7 @@
 
 module Gitlab::Markdown
   describe ExternalLinkFilter do
-    def filter(html, options = {})
-      described_class.call(html, options)
-    end
+    include FilterSpecHelper
 
     it 'ignores elements without an href attribute' do
       exp = act = %q(<a id="ignored">Ignore Me</a>)
diff --git a/spec/lib/gitlab/markdown/issue_reference_filter_spec.rb b/spec/lib/gitlab/markdown/issue_reference_filter_spec.rb
index a838d7570c84641e4f6eb2dc7a248745e80d076f..fa43d33794d5d76c6ff4206a0449e7a7f6c4e8fe 100644
--- a/spec/lib/gitlab/markdown/issue_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/issue_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe IssueReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     def helper
       IssuesHelper
diff --git a/spec/lib/gitlab/markdown/label_reference_filter_spec.rb b/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
index 41987f57bca4dae9d4fb49b3f4406506de31156b..cf3337b1ba1abebbeea49f062aa013e2def7667b 100644
--- a/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
@@ -3,7 +3,7 @@
 
 module Gitlab::Markdown
   describe LabelReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project)   { create(:empty_project) }
     let(:label)     { create(:label, project: project) }
diff --git a/spec/lib/gitlab/markdown/merge_request_reference_filter_spec.rb b/spec/lib/gitlab/markdown/merge_request_reference_filter_spec.rb
index 6aeb10936022ca2af549a027dd0b1c4518ae8aac..5945302a2da33ed5a153837031315be2cd3a6e24 100644
--- a/spec/lib/gitlab/markdown/merge_request_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/merge_request_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe MergeRequestReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project) { create(:project) }
     let(:merge)   { create(:merge_request, source_project: project) }
diff --git a/spec/lib/gitlab/markdown/sanitization_filter_spec.rb b/spec/lib/gitlab/markdown/sanitization_filter_spec.rb
index 80f3d2f2634ade0c509a55472d56f207b8c7bbf0..8627cb288abd98bb12253cef96135eb832150b6a 100644
--- a/spec/lib/gitlab/markdown/sanitization_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/sanitization_filter_spec.rb
@@ -2,9 +2,7 @@
 
 module Gitlab::Markdown
   describe SanitizationFilter do
-    def filter(html, options = {})
-      described_class.call(html, options)
-    end
+    include FilterSpecHelper
 
     describe 'default whitelist' do
       it 'sanitizes tags that are not whitelisted' do
diff --git a/spec/lib/gitlab/markdown/snippet_reference_filter_spec.rb b/spec/lib/gitlab/markdown/snippet_reference_filter_spec.rb
index 07ece66e9034aa3dfe675490d5b5a4bbf6f5c029..38619a3c07f65471452cdb346946669eb7fd2184 100644
--- a/spec/lib/gitlab/markdown/snippet_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/snippet_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe SnippetReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project)   { create(:empty_project) }
     let(:snippet)   { create(:project_snippet, project: project) }
diff --git a/spec/lib/gitlab/markdown/table_of_contents_filter_spec.rb b/spec/lib/gitlab/markdown/table_of_contents_filter_spec.rb
index f383a5850d5419ca307b45f317225d31f993d938..ddf583a72c12501bd059b36a94f47a07011a5a2d 100644
--- a/spec/lib/gitlab/markdown/table_of_contents_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/table_of_contents_filter_spec.rb
@@ -4,9 +4,7 @@
 
 module Gitlab::Markdown
   describe TableOfContentsFilter do
-    def filter(html, options = {})
-      described_class.call(html, options)
-    end
+    include FilterSpecHelper
 
     def header(level, text)
       "<h#{level}>#{text}</h#{level}>\n"
diff --git a/spec/lib/gitlab/markdown/task_list_filter_spec.rb b/spec/lib/gitlab/markdown/task_list_filter_spec.rb
index 2a1e1cc5127ddf15de70b9ee2d614d2bd7914060..94f39cc966ed55ed6903c85fd01842a19d08acae 100644
--- a/spec/lib/gitlab/markdown/task_list_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/task_list_filter_spec.rb
@@ -2,9 +2,7 @@
 
 module Gitlab::Markdown
   describe TaskListFilter do
-    def filter(html, options = {})
-      described_class.call(html, options)
-    end
+    include FilterSpecHelper
 
     it 'does not apply `task-list` class to non-task lists' do
       exp = act = %(<ul><li>Item</li></ul>)
diff --git a/spec/lib/gitlab/markdown/user_reference_filter_spec.rb b/spec/lib/gitlab/markdown/user_reference_filter_spec.rb
index 0ecbdee9b9eb8074053a313afcc5000cdeb3a579..08e6941028f5db93ab3fa5c9294bf0ba3f167961 100644
--- a/spec/lib/gitlab/markdown/user_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/user_reference_filter_spec.rb
@@ -2,7 +2,7 @@
 
 module Gitlab::Markdown
   describe UserReferenceFilter do
-    include ReferenceFilterSpecHelper
+    include FilterSpecHelper
 
     let(:project)   { create(:empty_project) }
     let(:user)      { create(:user) }
diff --git a/spec/support/reference_filter_spec_helper.rb b/spec/support/filter_spec_helper.rb
similarity index 75%
rename from spec/support/reference_filter_spec_helper.rb
rename to spec/support/filter_spec_helper.rb
index afbea55ab99ef2a726814f41416f7334813320e6..755964e9a3d3819416b52715ac508c1bf41775b1 100644
--- a/spec/support/reference_filter_spec_helper.rb
+++ b/spec/support/filter_spec_helper.rb
@@ -1,46 +1,23 @@
-# Common methods and setup for Gitlab::Markdown reference filter specs
+# Helper methods for Gitlab::Markdown filter specs
 #
 # Must be included into specs manually
-module ReferenceFilterSpecHelper
+module FilterSpecHelper
   extend ActiveSupport::Concern
 
-  # Shortcut to Rails' auto-generated routes helpers, to avoid including the
-  # module
-  def urls
-    Rails.application.routes.url_helpers
-  end
-
-  # Modify a String reference to make it invalid
-  #
-  # Commit SHAs get reversed, IDs get incremented by 1, all other Strings get
-  # their word characters reversed.
-  #
-  # reference - String reference to modify
-  #
-  # Returns a String
-  def invalidate_reference(reference)
-    if reference =~ /\A(.+)?.\d+\z/
-      # Integer-based reference with optional project prefix
-      reference.gsub(/\d+\z/) { |i| i.to_i + 1 }
-    elsif reference =~ /\A(.+@)?(\h{6,40}\z)/
-      # SHA-based reference with optional prefix
-      reference.gsub(/\h{6,40}\z/) { |v| v.reverse }
-    else
-      reference.gsub(/\w+\z/) { |v| v.reverse }
-    end
-  end
-
   # Perform `call` on the described class
   #
-  # Automatically passes the current `project` value to the context if none is
-  # provided.
+  # Automatically passes the current `project` value, if defined, to the context
+  # if none is provided.
   #
-  # html     - String text to pass to the filter's `call` method.
+  # html     - HTML String to pass to the filter's `call` method.
   # contexts - Hash context for the filter. (default: {project: project})
   #
-  # Returns the String text returned by the filter's `call` method.
+  # Returns a Nokogiri::XML::DocumentFragment
   def filter(html, contexts = {})
-    contexts.reverse_merge!(project: project)
+    if defined?(project)
+      contexts.reverse_merge!(project: project)
+    end
+
     described_class.call(html, contexts)
   end
 
@@ -50,7 +27,7 @@ def filter(html, contexts = {})
   # body     - String text to run through the pipeline
   # contexts - Hash context for the filter. (default: {project: project})
   #
-  # Returns the Hash of the pipeline result
+  # Returns the Hash
   def pipeline_result(body, contexts = {})
     contexts.reverse_merge!(project: project)
 
@@ -58,13 +35,43 @@ def pipeline_result(body, contexts = {})
     pipeline.call(body)
   end
 
+  # Modify a String reference to make it invalid
+  #
+  # Commit SHAs get reversed, IDs get incremented by 1, all other Strings get
+  # their word characters reversed.
+  #
+  # reference - String reference to modify
+  #
+  # Returns a String
+  def invalidate_reference(reference)
+    if reference =~ /\A(.+)?.\d+\z/
+      # Integer-based reference with optional project prefix
+      reference.gsub(/\d+\z/) { |i| i.to_i + 1 }
+    elsif reference =~ /\A(.+@)?(\h{6,40}\z)/
+      # SHA-based reference with optional prefix
+      reference.gsub(/\h{6,40}\z/) { |v| v.reverse }
+    else
+      reference.gsub(/\w+\z/) { |v| v.reverse }
+    end
+  end
+
+  # Stub CrossProjectReference#user_can_reference_project? to return true for
+  # the current test
   def allow_cross_reference!
     allow_any_instance_of(described_class).
       to receive(:user_can_reference_project?).and_return(true)
   end
 
+  # Stub CrossProjectReference#user_can_reference_project? to return false for
+  # the current test
   def disallow_cross_reference!
     allow_any_instance_of(described_class).
       to receive(:user_can_reference_project?).and_return(false)
   end
+
+  # Shortcut to Rails' auto-generated routes helpers, to avoid including the
+  # module
+  def urls
+    Rails.application.routes.url_helpers
+  end
 end