分かるまでに時間がかかったので、共有します。
方法
rendered.class == String
なので、rendered.clear
をします。
使用例
マッチする文字列の数を数えないと、表示されていることの確認ができないカラムをテストする場合
spec/equipments/show.html.erb_spec.rb
describe "books/show", type: :view do
before do
@book = Book.new
end
it '販売累計が表示されること' do
old_sold_count = 1
new_sold_count = 2
@book.sold_count = old_sold_count
render
expect(rendered).to match old_sold_count.to_s
before_old_sold_count = rendered.scan(old_sold_count.to_s).count
before_new_sold_count = rendered.scan(new_sold_count.to_s).count
@book.sold_count = new_sold_count
# renderedを消してから、再度render
rendered.clear
render
after_old_sold_count = rendered.scan(old_sold_count.to_s).count
after_new_sold_count = rendered.scan(new_sold_count.to_s).count
expect(after_old_sold_count - before_old_sold_count).to eq(-1)
expect(after_new_sold_count - before_new_sold_count).to eq(1)
end
end
まとめ
rspec view render twice
とかでググっても情報が出ませんでしたが、rendered
はstring
なので、この方法で問題ないと思います。
以上、誰かのお役に立てれば幸いです。