如何期待'渲染模板'错误

时间:2016-08-28 09:19:40

标签: ruby-on-rails ruby rspec

我有一个视图模板" show.html.haml",类似

- if current_user.admin?
  balabala

它会得到"未定义的方法`admin?'为零:NilClass"而GET #show。我用"修复了它。 - if!current_user.nil? &安培;&安培; current_user.admin?&#34 ;.我想在RSpec中添加一个测试用例。

describe "before login user - " do

  it "render the show template" do
    book = FactoryGirl.create(:book)
    get :show, id: book.id

    expect(response).to render_template("show")
    expect(response).to be_success
  end
end

在运行" bin / rake spec"时,无论我是否添加条件"!current_user.nil?",它总能获得成功。如何在我想检查呈现是否显示'时如何编写expect子句。观点是成功的吗?

4 个答案:

答案 0 :(得分:2)

当您尝试从controller spec 测试视图内容时,您无法直接执行此操作。

您可以使用render_views声明执行此操作,但不推荐,而应选择request specfeature spec来测试完整请求 - 响应周期。

全局设置render_views

RSpec.configure do |config|
  config.render_views
end

规格:

describe "before login user - " do
  it "render the show template" do
    book = FactoryGirl.create(:book)
    get :show, id: book.id
    expect(response).to render_template("show")
    expect(response.body).to match /balabala/
  end
end

答案 1 :(得分:1)

默认情况下,视图不会在控制器规范中呈现。您需要通过编写render_views(在describe块中)明确启用它。请参阅参考:https://www.relishapp.com/rspec/rspec-rails/v/3-5/docs/controller-specs/render-views

答案 2 :(得分:0)

您需要在自己的规范中“登录”。请勿更改代码以使测试通过。检查呈现是否成功很简单,只需检查响应状态:

expect(response.status).to eq 200

答案 3 :(得分:0)

添加type: :view,就像这样。

describe "before login user - ", type: :view do
  it "render the show template" do
    book = FactoryGirl.create(:book)
    get :show, id: book.id

    expect(response).to render_template("show")
    expect(response).to be_success
  end
end
相关问题