如何测试是否呈现正确的模板(RSpec Rails)?

时间:2016-04-20 12:46:56

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

我试图掌握TDD的一些概念,在我的RoR应用程序中,我有/关于属于static_pages#about的视图。它具有在routes.rb get 'about' => 'static_pages#about'中定义的路由。到目前为止一切都在浏览器中工作,但我也想通过RSpec测试它。 鉴于

RSpec.describe "about.html.erb", type: :view do
  it "renders about view" do
    render :template => "about"
    expect(response).to render_template('/about')
  end
end

引发错误

Missing template /about with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :vcf, :png, :......

谢谢!

1 个答案:

答案 0 :(得分:3)

这个规范没什么意义 - 视图规范的整个想法是你渲染测试中的视图,然后写出关于其内容的期望(关于TDD的断言)。查看规范有时对测试复杂视图很有用,但在这种情况下不是您需要的。

如果你想测试控制器呈现正确的模板,你可以在控制器规范中进行测试。

require 'rails_helper'
RSpec.describe StaticPagesController, type: :controller do
  describe "GET /about" do
    it "renders the correct template" do
      get :about
      expect(response).to render_template "static_pages/about"
    end
  end
end

虽然这种规范通常没什么价值 - 你只是测试rails的默认行为,这可以通过feature spec覆盖,这可以增加更多价值:

require 'rails_helper'
RSpec.feature "About page" do
  before do
    visit root_path
  end

  scenario "as a vistior I should be able to visit the about page" do
    click_link "About"
    expect(page).to have_content "About AcmeCorp"
  end
end

请注意,在这里,我们已经离开了TDD的世界,进入了所谓的行为驱动开发(BDD)。这更关注软件的行为,而不是关于如何完成工作的细节。