【问题标题】:Rspec controller spec doesn't fail with missing templateRspec 控制器规范不会因缺少模板而失败
【发布时间】:2019-03-26 02:47:51
【问题描述】:

我正在使用 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 模板,我将如何编写规范以使其失败?

【问题讨论】:

    标签: ruby-on-rails rspec rspec-rails


    【解决方案1】:

    controller specs 默认不渲染视图,你可以调用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

    编辑:控制器默认不渲染视图的原因是您可以添加适当的视图规范来测试视图是否存在并具有您想要的内容

    【讨论】:

    • 即使使用 render_views,它也不会失败 - 它只是呈现 html 模板,而不是尝试(并且失败)呈现 .js 模板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2015-09-27
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多