Reputation: 6867
I am trying to get started in testing ActiveAdmin, in particular I need to test a member_action from one of the ActiveAdmin controllers.
Do you guys know any good tutorials on this topic?
Thank you,
Upvotes: 17
Views: 12266
Reputation: 25162
Answer for 2024 and Rails v7 & v8
rails_helper.rb
RSpec.configure do |config|
config.include Devise::Test::IntegrationHelpers, type: :request
end
app/admin/dashboard.rb
ActiveAdmin.register_page 'Dashboard' do
content do
div class: 'blank_slate_container', id: 'dashboard_default_message' do
span class: 'blank_slate' do
span 'Welcome to the Admin'
end
end
end
end
spec/admin/dashboard_controller_spec.rb
RSpec.describe Admin::DashboardController, type: :request do
it 'redirects to login' do
get :admin_dashboard_path
expect(response).to redirect_to(new_admin_user_session_path)
end
context 'when logged in as admin' do
let(:admin) { create(:admin_user) }
before { sign_in(admin) }
it 'renders page' do
get :admin_dashboard_path
expect(response.body).to include('Welcome to the Admin')
end
end
end
Upvotes: 3
Reputation: 24009
# app/admin/post.rb
ActiveAdmin.register Post do
end
# spec/controller/admin/posts_controller_spec.rb
describe Admin::PostsController do
subject { get :index }
its(:status) { should eq 200 }
end
Upvotes: 6
Reputation: 236
This is the way I did it that worked for me:-
ActiveAdmin.register Post do
menu :parent => "Admin"
#path = /admin/posts/:id/comments
member_action :comments do
@post = Post.find(params[:id])
end
end
require 'spec_helper'
include Devise::TestHelpers
describe Admin::PostsController do
render_views
before(:each) do
@user = mock_model(User, :email => "tester@localspecs.com")
request.env['tester'] = mock(Tester, :authenticate => @user, :authenticate! => @user)
end
describe "Get comments" do
before(:each) do
@post = Post.create! valid_attributes
Post.should_receive(:find).at_least(:once).and_return(@post)
get :comments, :id => @post.id
end
after(:each) do
@post.destroy
end
it "gets the proper record to update" do
assigns(:post).should eq(@post)
end
it "should render the actual template" do
response.should contain("Comments")
response.body.should =~ /Comments/m
end
end
end
Upvotes: 22