如何用 RSpec 测试覆盖 ActiveAdmin 资源的一部分?
How to cover form part of ActiveAdmin resource with RSpec tests?
我检查了我的覆盖文件,由 simplecov 构建,我看到了这样的未覆盖区域:
form do |f|
inputs 'Details' do
input :email, required: true
input :password, input_html: { value: t('empty_string') }, required: true
input :is_active, label: t('active')
input :slug
input :name
input :logo, as: :file
end
actions
end
我该如何处理?
更新:render_views 可以帮助避免未覆盖区域。
要让 SimpleCov 检测 ActiveAdmin 表单 DSL 的覆盖范围,您需要为编辑操作创建一个控制器测试。为创建和更新操作添加覆盖范围以确保 permitted_params
不过滤特定属性是个好主意。我已经包含了 AdminUser 模型的编辑和更新操作规范。
# spec/controllers/admin/users_controller_spec.rb
require 'rails_helper'
include Devise::TestHelpers
RSpec.describe Admin::AdminUsersController, type: :controller do
render_views
let(:admin_user) { AdminUser.create!(email: 'admin@example.com', password: 'password')}
before(:each) do
sign_in admin_user
end
describe 'edit' do
it 'renders user form' do
get :edit, id: admin_user.to_param
expect(assigns(:admin_user)).to eq admin_user
end
end
describe 'update' do
it 'updates user' do
patch :update, { id: admin_user.to_param, admin_user: { email: 'nimda@example.com' }}
admin_user.reload
expect(admin_user.email).to eq 'nimda@example.com'
end
end
end
我检查了我的覆盖文件,由 simplecov 构建,我看到了这样的未覆盖区域:
form do |f|
inputs 'Details' do
input :email, required: true
input :password, input_html: { value: t('empty_string') }, required: true
input :is_active, label: t('active')
input :slug
input :name
input :logo, as: :file
end
actions
end
我该如何处理?
更新:render_views 可以帮助避免未覆盖区域。
要让 SimpleCov 检测 ActiveAdmin 表单 DSL 的覆盖范围,您需要为编辑操作创建一个控制器测试。为创建和更新操作添加覆盖范围以确保 permitted_params
不过滤特定属性是个好主意。我已经包含了 AdminUser 模型的编辑和更新操作规范。
# spec/controllers/admin/users_controller_spec.rb
require 'rails_helper'
include Devise::TestHelpers
RSpec.describe Admin::AdminUsersController, type: :controller do
render_views
let(:admin_user) { AdminUser.create!(email: 'admin@example.com', password: 'password')}
before(:each) do
sign_in admin_user
end
describe 'edit' do
it 'renders user form' do
get :edit, id: admin_user.to_param
expect(assigns(:admin_user)).to eq admin_user
end
end
describe 'update' do
it 'updates user' do
patch :update, { id: admin_user.to_param, admin_user: { email: 'nimda@example.com' }}
admin_user.reload
expect(admin_user.email).to eq 'nimda@example.com'
end
end
end