Use when writing, debugging, or reviewing tests in this Rails app. Covers Docker-only test commands, Minitest conventions, assertions, stubs, authentication helpers, and Mobility examples.
Canonical project instructions live in AGENTS.md. This skill summarizes Docker-only Minitest commands and patterns aligned with .agent-docs/conventions.md (Mobility .i18n, i18n in tests).
This project uses Minitest (not RSpec). Tests must run via Docker.
# All tests
docker compose -f docker-compose.test.yml exec skateparks-web-test bin/rails test
# With coverage (default unless DISABLE_SIMPLECOV=1; clear `coverage/` for a clean merged report)
docker compose -f docker-compose.test.yml exec skateparks-web-test bash -c "rm -rf coverage && bin/rails test"
# Without coverage (faster)
docker compose -f docker-compose.test.yml exec skateparks-web-test bash -c "DISABLE_SIMPLECOV=1 bin/rails test"
# Single file
docker compose -f docker-compose.test.yml exec skateparks-web-test bin/rails test test/models/skatepark_test.rb
# By line number
docker compose -f docker-compose.test.yml exec skateparks-web-test bin/rails test test/models/skatepark_test.rb:42
# By method name
docker compose -f docker-compose.test.yml exec skateparks-web-test bin/rails test -n test_method_name
Container: skateparks-web-test. Start with sh scripts.sh -> "Start test server" if not running.
class SkateparkTest < ActiveSupport::TestCase
def setup
@skatepark = create(:skatepark)
end
def test_requires_name
@skatepark.name = nil
assert_not @skatepark.valid?
end
end
| Test type | Base class |
|---|---|
| Models | ActiveSupport::TestCase |
| Controllers | ActionDispatch::IntegrationTest |
| ViewComponents | ViewComponent::TestCase |
| Workers | ActiveSupport::TestCase |
| System | ApplicationSystemTestCase |
assert expr / assert_not expr
assert_equal expected, actual # expected FIRST
assert_nil / assert_not_nil
assert_includes collection, item
assert_raises(Error) { block }
assert_difference('Model.count', 1) { create(:model) }
assert_response :success / :redirect / :forbidden
assert_redirected_to path
object.stubs(:method).returns(value)
object.expects(:method).once
ClassName.any_instance.stubs(:method).returns(value)
login_as(create(:user)) # regular user
login_as(create(:user, :admin)) # admin
# No call = unauthenticated request
I18n.with_locale(:el) { assert_equal 'Σκέιτπαρκ', @skatepark.name }
Skatepark.i18n.where(name: 'x') # use .i18n scope for translated queries