Rails 5 and 6 support this in a much more convenient manner that handles creating a request and whatnot behind the scenes:
rendered_string = ApplicationController.render(
template: 'users/show',
assigns: { user: @user }
)
This renders app/views/users/show.html.erb and sets the @user instance variable so you don’t need to make any changes to your template. It automatically uses the layout specified in ApplicationController (application.html.erb by default). Full documentation can be found here.
The test shows a handful of additional options and approaches.