😽

Hotwire(turbo_stream)使用箇所のControllerテストではformatの指定が必要

2022/11/03に公開

タイトル通りで、例えばCatモデルのcreateでturbo_streamを使ってる場合、controllerテストは下記の書き方だとエラーになってしまう。

require 'test_helper'

class CatsControllerTest < ActionDispatch::IntegrationTest
  setup do
    @cat = cats(:one)
  end

  test 'should create cat' do
    assert_difference('Cat.count') do
      post cats_url, params: { cat: { name: @cat.name } }
    end

    assert_redirected_to cat_url(Cat.last)
  end
end

# createでturbo_streamを使ってる場合、上記テストを実行するとエラーとなる
# Error:
# CatsControllerTest#test_should_create_cat:
# ActionController::UnknownFormat: CatsController#create is missing a template for this request format and variant.
# 
# request.formats: ["text/html"]
# request.variant: []

turbo_streamを使ってるときは、URLヘルパーにformat: :turbo_streamを指定する必要がある。

  test 'should create cat' do
    assert_difference('Cat.count') do
      post cats_url(format: :turbo_stream), params: { cat: { name: @cat.name } }
    end

    assert_response :success
  end

参考: https://discuss.rubyonrails.org/t/how-should-i-test-my-controlles-while-im-using-turbo/79495

Discussion