Sinatra Rspec - 测试视图是否已呈现

Sinatra Rspec - testing that a view has rendered

我正在为 Sinatra 应用程序编写测试,该应用程序通过 gem 从 API 获取输入。收到 API 响应后,我需要测试模板是否已正确呈现。 API 的响应将是我正在加载的页面的 HTML。

我的第一直觉是编写一个如下所示的测试:

describe 'the root path'
  it 'should render the index view' do
    get '/'

    expect(last_response).to render_template(:index)
  end 
end

不幸的是,当我尝试这个时,我收到以下错误:undefined method `render_template'

我想知道是否有人遇到过这个问题 - 看起来应该很容易解决,但我似乎找不到任何文档来帮助解决这个问题。

我们最终放弃了这种方法,因为 Selenium 或 Capybara 等集成测试工具套件可以更好地处理它。我在基本的 Sinatra Rspec 套件中找不到可以做到这一点的等效项 - 将其移至不同的范围更有意义

由于时间限制,我目前根本没有测试视图,但我确实在 Rack::Test 上取得了一些有限的成功。

理论上你可以说:

require 'rack/test'
include Rack::Test::Methods

def app
  Sinatra::Application
end

describe 'it should render the index view' do
  get '/'
  expect(last_response).to be_ok
  expect(last_response.body).to eq(a_bunch_of_html_somehow)
end

如果我再次走这条路,因为我的观点是 haml,我可以通过调用 Haml::Engine 来实现 a_bunch_of_html_somehow 方法——但我不确定这是否有帮助你.

我从 Sinatra 网站上批发了这个 here -- 该页面非常值得一读。