I 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