😽
Hotwire(turbo_stream)使用箇所のControllerテストではformatの指定が必要
タイトル通りで、例えば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