From rails-agent-skills
Guides creation or improvement of RSpec test coverage for Rails engines, covering dummy app setup, request, routing, generator, and configuration specs to verify host app integration.
npx claudepluginhub igmarin/rails-agent-skills --plugin rails-agent-skillsThis skill uses the workspace's default tool permissions.
Use this skill when the task is to create or improve test coverage for a Rails engine.
Reviews Rails engines, mountable engines, and Railties for namespace boundaries, host-app integration, safe initialization, migrations, generators, and dummy app test coverage. Prioritizes architectural risks.
Assists writing, reviewing, and improving RSpec tests for Ruby on Rails apps including model, controller, system, and integration specs using Better Specs and thoughtbot best practices.
Writes, fixes, and refactors RSpec tests for Ruby/Rails apps using describe/it blocks, expect matchers, test doubles, FactoryBot, and TDD best practices. Activates on spec files or test queries.
Share bugs, ideas, or general feedback.
Use this skill when the task is to create or improve test coverage for a Rails engine.
| Spec Type | Purpose |
|-----------|---------||
| Request | Proves mounted endpoints work; exercises real routing and controller |
| Routing | Verifies engine route expectations and mount behavior |
| Generator | Covers install commands, copied files, idempotency |
| Config | Verifies engine respects host configuration overrides |
| Reload-safety | Regression tests for decorators, patches, and to_prepare hooks |
EVERY engine MUST have a dummy app for testing.
Generate one if it doesn't exist:
cd my_engine && bundle exec rails plugin new . --dummy-path=spec/dummy --skip-git
Validate the dummy app boots before proceeding:
cd spec/dummy && bundle exec rails runner "puts 'Boot OK'"
If this fails, check the engine's engine.rb initializer order and ensure the engine is correctly mounted in spec/dummy/config/routes.rb before writing any specs.
engine.rb initializer order and mount configuration rather than adding more specs on top of a broken foundation.For a non-trivial engine, aim for:
If generators exist, add generator specs. If decorators or reload hooks exist, add reload-focused coverage.
Minimal request spec to prove the engine mounts:
# spec/requests/my_engine/root_spec.rb
require 'rails_helper'
RSpec.describe 'MyEngine mount', type: :request do
it 'returns ok for the engine root' do
get my_engine.root_path
expect(response).to have_http_status(:ok)
end
end
Configuration spec (engine respects host config):
# spec/my_engine/configuration_spec.rb
RSpec.describe MyEngine::Configuration do
around do |example|
original = MyEngine.config.widget_count
MyEngine.config.widget_count = 3
example.run
MyEngine.config.widget_count = original
end
it 'uses configured value' do
expect(MyEngine.config.widget_count).to eq(3)
end
end
For generator and reload-safety spec examples, see assets/examples.md.
| Pitfall | What to do |
|---|---|
| Skipping reload-safety tests | Add regression coverage for decorators and patches in development |
| Tests pass only with specific Rails version | Run a version matrix; pin nothing unless required |
| Request specs use stubs instead of real wiring | Mount the engine in dummy and call through it |
| Install generators without file assertions | Assert copied files and idempotency in generator specs |
| Skill | When to chain |
|---|---|
| rails-engine-author | When structuring the engine for testability or adding configuration seams |
| rails-engine-reviewer | When validating test coverage adequacy or identifying gaps |
| rspec-best-practices | When improving spec structure, matchers, or shared examples |