我正在使用可安装的引擎,这可能与此问题有关。我有一个页面,我试图测试一些内容的存在。现在,我已经硬编码了内联模板。
pagescontroller#显示:
def show
respond_to do |format|
format.html {
render inline: "<p>Dummy content</p>", layout: 'myengine/application'
}
end
end
来自pages_spec.rb的相关规范:
it "should have the right content" do
visit 'my_url'
puts "page.body:", page.body
# right now, pagescontroller renders any layout as blank. That's why page.body is always blank
expect(page.body).to have_content 'Dummy content'
end
当我运行规范时,我明白了:
page.body:
<html><head></head><body></body></html>
F
Failures:
1) MyEngine::PagesController the page should have the right content
Failure/Error: expect(page.body).to have_content 'content'
expected to find text "content" in ""
# ./spec/controllers/myengine/pages_spec.rb:18:in `block (3 levels) in <top (required)>'
我已经确认rails正在寻找适当位置的应用程序布局,如果我给它一个不存在的布局,它会让我知道它无法找到它。所以我知道它找到了名为/app/views/layouts/myengine/application.html.erb
的某事。但它没有呈现/app/views/layouts/myengine/application.html.erb
中的任何内容。
如果我将pagescontroller #show中渲染行的布局注释掉为render inline: "<p>Dummy content</p>"#, layout: 'myengine/application'
,那么它可以正常工作。 page.body
有<p>Dummy content</p>
。
另一个注意事项:当我在浏览器中执行此操作时,它会按预期呈现应用程序布局,因此我怀疑它与RSpec有关。
为什么会发生这种情况?为什么渲染任何我给出的布局为空白?我是否需要在此处执行其他操作,因为我在可安装的引擎中测试虚拟应用程序?
修改
这是我的layouts/myengine/application.html.erb
:
<!DOCTYPE html>
<html>
<head>
<title>MyEngine</title>
<%= stylesheet_link_tag "myengine/application", media: "all" %>
<%= javascript_include_tag "myengine/application", "data-turbolinks-track" => true %>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<%= csrf_meta_tags %>
<% if noindex? %><meta name="robots" value="noindex" /><% end %>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<% if logged_in? %>
<%= render 'layouts/header' %>
<% end %>
<div id="ruler"></div>
<% flash.each do |key, value| %>
<script type="text/javascript">Materialize.toast('<span class="<%= key %>"><%= value %></span>', 8000);</script>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
</body>
</html>