diff --git a/changelogs/unreleased/23036-replace-dashboard-event-filters-spinach.yml b/changelogs/unreleased/23036-replace-dashboard-event-filters-spinach.yml
new file mode 100644
index 0000000000000000000000000000000000000000..807cd0971787293d1127e2d7928b46f0dab71ab4
--- /dev/null
+++ b/changelogs/unreleased/23036-replace-dashboard-event-filters-spinach.yml
@@ -0,0 +1,4 @@
+---
+title: Replaces dashboard/event_filters.feature spinach with rspec
+merge_request: 12651
+author: Alexander Randa (@randaalex)
diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature
deleted file mode 100644
index 8c3ff64164f9ebb76e374b58616792b8c455f933..0000000000000000000000000000000000000000
--- a/features/dashboard/event_filters.feature
+++ /dev/null
@@ -1,58 +0,0 @@
-@dashboard
-Feature: Event Filters
-  Background:
-    Given I sign in as a user
-    And I own a project
-    And this project has push event
-    And this project has new member event
-    And this project has merge request event
-    And I visit dashboard activity page
-
-  @javascript
-  Scenario: I should see all events
-    Then I should see push event
-    And I should see new member event
-    And I should see merge request event
-
-  @javascript
-  Scenario: I should see only pushed events
-    When I click "push" event filter
-    Then I should see push event
-    And I should not see new member event
-    And I should not see merge request event
-
-  @javascript
-  Scenario: I should see only joined events
-    When I click "team" event filter
-    Then I should see new member event
-    And I should not see push event
-    And I should not see merge request event
-
-  @javascript
-  Scenario: I should see only merged events
-    When I click "merge" event filter
-    Then I should see merge request event
-    And I should not see push event
-    And I should not see new member event
-
-  @javascript
-  Scenario: I should see only selected events while page reloaded
-    When I click "push" event filter
-    And I visit dashboard activity page
-    Then I should see push event
-    And I should not see new member event
-    When I click "team" event filter
-    And I visit dashboard activity page
-    Then I should not see push event
-    And I should see new member event
-    And I should not see merge request event
-    When I click "push" event filter
-    And I visit dashboard activity page
-    Then I should see push event
-    And I should not see new member event
-    And I should not see merge request event
-    When I click "merge" event filter
-    And I visit dashboard activity page
-    Then I should see merge request event
-    And I should not see push event
-    And I should not see new member event
diff --git a/features/steps/dashboard/event_filters.rb b/features/steps/dashboard/event_filters.rb
deleted file mode 100644
index a745254cc317cc1865af3ab85bc986ea8ec2812b..0000000000000000000000000000000000000000
--- a/features/steps/dashboard/event_filters.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-class Spinach::Features::EventFilters < Spinach::FeatureSteps
-  include WaitForRequests
-  include SharedAuthentication
-  include SharedPaths
-  include SharedProject
-
-  step 'I should see push event' do
-    expect(page).to have_selector('span.pushed')
-  end
-
-  step 'I should not see push event' do
-    expect(page).not_to have_selector('span.pushed')
-  end
-
-  step 'I should see new member event' do
-    expect(page).to have_selector('span.joined')
-  end
-
-  step 'I should not see new member event' do
-    expect(page).not_to have_selector('span.joined')
-  end
-
-  step 'I should see merge request event' do
-    expect(page).to have_selector('span.accepted')
-  end
-
-  step 'I should not see merge request event' do
-    expect(page).not_to have_selector('span.accepted')
-  end
-
-  step 'this project has push event' do
-    data = {
-      before: Gitlab::Git::BLANK_SHA,
-      after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e",
-      ref: "refs/heads/new_design",
-      user_id: @user.id,
-      user_name: @user.name,
-      repository: {
-        name: @project.name,
-        url: "localhost/rubinius",
-        description: "",
-        homepage: "localhost/rubinius",
-        private: true
-      }
-    }
-
-    @event = Event.create(
-      project: @project,
-      action: Event::PUSHED,
-      data: data,
-      author_id: @user.id
-    )
-  end
-
-  step 'this project has new member event' do
-    user = create(:user, { name: "John Doe" })
-    Event.create(
-      project: @project,
-      author_id: user.id,
-      action: Event::JOINED
-    )
-  end
-
-  step 'this project has merge request event' do
-    merge_request = create :merge_request, author: @user, source_project: @project, target_project: @project
-    Event.create(
-      project: @project,
-      action: Event::MERGED,
-      target_id: merge_request.id,
-      target_type: "MergeRequest",
-      author_id: @user.id
-    )
-  end
-
-  When 'I click "push" event filter' do
-    wait_for_requests
-    click_link("Push events")
-    wait_for_requests
-  end
-
-  When 'I click "team" event filter' do
-    wait_for_requests
-    click_link("Team")
-    wait_for_requests
-  end
-
-  When 'I click "merge" event filter' do
-    wait_for_requests
-    click_link("Merge events")
-    wait_for_requests
-  end
-end
diff --git a/spec/features/dashboard/activity_spec.rb b/spec/features/dashboard/activity_spec.rb
index ebfe7340eb73db04f438c77ca30060f3c7130e95..a96270c914708f4ce93b7ac81de035e3e5d4bd25 100644
--- a/spec/features/dashboard/activity_spec.rb
+++ b/spec/features/dashboard/activity_spec.rb
@@ -1,13 +1,162 @@
 require 'spec_helper'
 
-RSpec.describe 'Dashboard Activity', feature: true do
+feature 'Dashboard > Activity' do
   let(:user) { create(:user) }
 
   before do
     sign_in(user)
-    visit activity_dashboard_path
   end
 
-  it_behaves_like "it has an RSS button with current_user's RSS token"
-  it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token"
+  context 'rss' do
+    before do
+      visit activity_dashboard_path
+    end
+
+    it_behaves_like "it has an RSS button with current_user's RSS token"
+    it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token"
+  end
+
+  context 'event filters', :js do
+    let(:project) { create(:empty_project) }
+
+    let(:merge_request) do
+      create(:merge_request, author: user, source_project: project, target_project: project)
+    end
+
+    let(:push_event_data) do
+      {
+        before: Gitlab::Git::BLANK_SHA,
+        after: '0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e',
+        ref: 'refs/heads/new_design',
+        user_id: user.id,
+        user_name: user.name,
+        repository: {
+          name: project.name,
+          url: 'localhost/rubinius',
+          description: '',
+          homepage: 'localhost/rubinius',
+          private: true
+        }
+      }
+    end
+
+    let(:note) { create(:note, project: project, noteable: merge_request) }
+
+    let!(:push_event) do
+      create(:event, :pushed, data: push_event_data, project: project, author: user)
+    end
+
+    let!(:merged_event) do
+      create(:event, :merged, project: project, target: merge_request, author: user)
+    end
+
+    let!(:joined_event) do
+      create(:event, :joined, project: project, author: user)
+    end
+
+    let!(:closed_event) do
+      create(:event, :closed, project: project, target: merge_request, author: user)
+    end
+
+    let!(:comments_event) do
+      create(:event, :commented, project: project, target: note, author: user)
+    end
+
+    before do
+      project.add_master(user)
+
+      visit activity_dashboard_path
+      wait_for_requests
+    end
+
+    scenario 'user should see all events' do
+      within '.content_list' do
+        expect(page).to have_content('pushed new branch')
+        expect(page).to have_content('joined')
+        expect(page).to have_content('accepted')
+        expect(page).to have_content('closed')
+        expect(page).to have_content('commented on')
+      end
+    end
+
+    scenario 'user should see only pushed events' do
+      click_link('Push events')
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).to have_content('pushed new branch')
+        expect(page).not_to have_content('joined')
+        expect(page).not_to have_content('accepted')
+        expect(page).not_to have_content('closed')
+        expect(page).not_to have_content('commented on')
+      end
+    end
+
+    scenario 'user should see only merged events' do
+      click_link('Merge events')
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).not_to have_content('pushed new branch')
+        expect(page).not_to have_content('joined')
+        expect(page).to have_content('accepted')
+        expect(page).not_to have_content('closed')
+        expect(page).not_to have_content('commented on')
+      end
+    end
+
+    scenario 'user should see only issues events' do
+      click_link('Issue events')
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).not_to have_content('pushed new branch')
+        expect(page).not_to have_content('joined')
+        expect(page).not_to have_content('accepted')
+        expect(page).to have_content('closed')
+        expect(page).not_to have_content('commented on')
+      end
+    end
+
+    scenario 'user should see only comments events' do
+      click_link('Comments')
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).not_to have_content('pushed new branch')
+        expect(page).not_to have_content('joined')
+        expect(page).not_to have_content('accepted')
+        expect(page).not_to have_content('closed')
+        expect(page).to have_content('commented on')
+      end
+    end
+
+    scenario 'user should see only joined events' do
+      click_link('Team')
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).not_to have_content('pushed new branch')
+        expect(page).to have_content('joined')
+        expect(page).not_to have_content('accepted')
+        expect(page).not_to have_content('closed')
+        expect(page).not_to have_content('commented on')
+      end
+    end
+
+    scenario 'user see selected event after page reloading' do
+      click_link('Push events')
+      wait_for_requests
+      visit activity_dashboard_path
+      wait_for_requests
+
+      within '.content_list' do
+        expect(page).to have_content('pushed new branch')
+        expect(page).not_to have_content('joined')
+        expect(page).not_to have_content('accepted')
+        expect(page).not_to have_content('closed')
+        expect(page).not_to have_content('commented on')
+      end
+    end
+  end
 end