我正在为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'
我想知道是否有人遇到过这个问题 - 它似乎应该是一个简单的修复,但我似乎无法找到任何文档来帮助它。
答案 0 :(得分:3)
由于时间限制,我目前根本没有测试视图,但我确实在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,我可以通过调用a_bunch_of_html_somehow
来实施Haml::Engine
方法 - 但我不确定这是否有帮助你。
我从Sinatra网站here解除了这个批发 - 这个页面非常值得一读。
答案 1 :(得分:1)
我们最终废弃了这种方法,因为Selenium或Capybara等集成测试工具套件可以更好地处理这种方法。我没有在基本的Sinatra Rspec套件中找到可以做到这一点的等价物 - 将它移动到不同的范围更有意义