Controller specs skip the rendering of views by default. If you want to inspect
some aspect of what is rendered in the HTML body of a response
(response.body
), you can include the render_views
directive in that spec.
require 'rails_helper'
RSpec.describe DashboardController do
describe '#index' do
render_views
context 'when there is a signed in user' do
it 'includes their email' do
user = User.create(email: '[email protected]')
sign_in(user)
get :index
expect(response.body).to include('[email protected]')
end
end
end
end
The render_views
directive call can go at the top of a spec, and all views
for all tests will be rendered. Or you can place it in the nested contexts only
where it is needed.
View rendering is skipped by default in an effort to keep tests speedy. To not
unnecessarily slow down your test suite, make sure to use it sparingly and only
in tests where you are actually inspecting response.body
.