我正在为控制器编写测试,但不断得到错误ActionView::MissingTemplate
。我已经看过之前问过的相关问题,但似乎无法使其与我的方案配合使用。
这是我的控制器代码:
def confirm_destroy
render :layout => 'overlay'
end
def destroy
@role.destroy
end
这是我编写的测试:
describe 'DELETE #destroy' do
let!(:role) { create(:role, user: current_user) }
let(:params) { {id: role.id, format: :json} }
it 'performs a delete' do
expect { delete :destroy, params }.to change { Role.count }.by(-1)
end
end
运行测试时出现错误:
ActionView::MissingTemplate:
Missing template company/settings/roles/destroy, application/destroy with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :slim]}. Searched in:
* "/my_app/app/views"
* "/usr/local/bundle/gems/devise-4.5.0/app/views"
有人知道为什么会这样吗?谢谢。
答案 0 :(得分:2)
完成控制器destroy
的操作后,Rails尝试呈现默认模板(视图)且未定义,这意味着您没有文件my_app/app/views/company/settings/roles/destroy.json
。
您可以通过多种方法进行修复:
my_app/app/views/company/settings/roles/destroy.json
,它将被呈现(不建议用于JSON)。index
(再次建议不要使用JSON)。-
# render nothing:
def destroy
@role.destroy
head :ok
end
# render json:
# render nothing:
def destroy
@role.destroy
render json: { deleted: true }, status: :no_content
end