Есть две вещи, которые вы можете сделать. Первый - позволить ActionController предоставить действие по умолчанию при его спасении ActiveRecord :: RecordNotFound:
class PostsControllerTest < ActionController::TestCase
test "raises RecordNotFound when not found" do
assert_raises(ActiveRecord::RecordNotFound) do
get :show, :id => 1234
end
end
end
Используя этот метод, вы не можете утверждать, что визуализируется. Вы должны доверять Rails / ActionController, чтобы не изменять поведение.
Альтернатива, которую я иногда использовал, такова:
class PostsControllerTest < ActionController::TestCase
test "renders post_missing page, and returns 404" do
get :show, params: { :id => 1234 }
assert_response :not_found
assert_template "post_missing"
end
end
class PostsController < ApplicationController
def show
@post = current_user.posts.find_by!(slug: params[:slug])
end
rescue_from ActiveRecord::RecordNotFound do
render :action => "post_missing", :status => :not_found
end
end
Вы должны прочитать больше о # rescue_from в API ActiveSupport.
Для простоты я обычно использую свое первое решение.