Rails Rspec 3 View Test Examples
- Last modified atI use Rspec View for testing required html tags, required partial, or conditional in html. Here are some examples View specs with Rspec 3.7.
Conditional and Required HTML Tags Assertions
# spec/views/posts/index.html.slim_spec.rb
Rspec.describe 'posts/index', type: :view do
let(:user) { User.first }
before do
@posts = assign(:posts, Post.limit(2))
end
context 'when user is signed in' do
before do
# mock current_user
allow(view).to receive(:current_user).and_return(user)
end
it 'shows edit link' do
render
expect(rendered).to have_css('#name', text: user.name)
assert_select 'table' do
assert 'tr:nth-child(1)' do
assert_select 'td:nth-child(1)', "#{@posts.first.title}"
assert_select "#edit-post-#{@posts.first.id}", 'Edit'
end
assert 'tr:nth-child(2)' do
assert_select 'td:nth-child(1)', "#{@posts.second.title}"
assert_select "#edit-post-#{@posts.second.id}", 'Edit'
end
end
end
end
context 'when user is not signed in' do
it 'does not show edit link' do
render
expect(rendered).not_to have_css('#name', text: user.name)
assert_select 'table' do
assert 'tr:nth-child(1)' do
assert_select 'td:nth-child(1)', "#{@posts.first.title}"
assert_select "#edit-post-#{@posts.first.id}", false
end
assert 'tr:nth-child(2)' do
assert_select 'td:nth-child(1)', "#{@posts.second.title}"
assert_select "#edit-post-#{@posts.second.id}", false
end
end
end
end
end
Partial and content_for Assertions
# spec/views/posts/show.html.slim_spec.rb
Rspec.describe 'posts/show', type: :view do
it 'renders sidebar partial and content_for content' do
render
expect(view.content_for(:title)).to eq t(:page_title_translation)
expect(rendered).to render_template(partial: 'shared/_sidebar')
end
end