我正在使用Rspec(rspec-rails 3.8.2)和rails-controller-testing(1.0.4)测试Rails(5.2.2.1)项目。我有一个看起来像这样的控制器:
class ThingsController < ApplicationController
def new
respond_to do |format|
format.html
format.js
end
end
end
和控制器规范看起来像这样:
require 'rails_helper'
describe ThingsController do
it 'renders a template' do
get :new, xhr: true, format: :js
expect(response).to render_template :new
end
end
我在app/views/things/new.html.erb
中创建了一个html模板但没有.js模板。即使没有适当的模板,规范也会通过。规格不应该失败吗?如何在没有.js模板的情况下编写规范以使其失败?
默认情况下,控制器规格不会渲染视图,您可以调用render_views
来渲染它们
require 'rails_helper'
describe ThingsController do
render_views
it 'renders a template' do
get :new, xhr: true, format: :js
expect(response).to render_template :new
end
end
https://relishapp.com/rspec/rspec-rails/v/2-0/docs/controller-specs/render-views
编辑:默认情况下控制器不呈现视图的原因是您可以添加适当的视图规范来测试视图是否存在并具有您想要的内容