为啥 ERB 不在 Rails 视图规范中执行?

Posted

技术标签:

【中文标题】为啥 ERB 不在 Rails 视图规范中执行?【英文标题】:Why is ERB not executing in Rails view spec?为什么 ERB 不在 Rails 视图规范中执行? 【发布时间】:2022-01-13 21:01:33 【问题描述】:

我正在尝试让一些 ERB 在视图规范中执行。

我有一个视图规范来测试一些简单的 ERB 逻辑。 这是视图文件:

<!DOCTYPE html>
<html>
  <body>
    <%= puts 'hello world' %>
  </body>
</html>

在我的规范中,我有这样的期望:

expect(response.body).to include('hello')

但是,规范并未执行 ERB。 正文返回了一些内容,但 &lt;body&gt;&lt;/body&gt; 的内部没有任何内容。

任何想法如何让 ERB 代码执行? 这可能是一个配置问题。 这个规范是 Rails 引擎的一部分(如果有帮助就分享一下)。

在本地运行服务器时,执行ERB并出现“hello world”。 试图弄清楚如何让 RSpec 执行 ERB。

【问题讨论】:

如果您从 &lt;%= puts 'hello world' %&gt; 更改为 &lt;%= 'hello world' %&gt; 会发生什么? 【参考方案1】:

&lt;%= %&gt; 这会计算表达式并将返回值附加到它的位置。在你的情况下,里面的表达式是puts("hello world"),它将返回nil

所以在执行后nil 被附加到body 标记内。为此,将其更改为

<!DOCTYPE html>
<html>
  <body>
    <%= 'hello world' %>
  </body>
</html>

【讨论】:

以上是关于为啥 ERB 不在 Rails 视图规范中执行?的主要内容,如果未能解决你的问题,请参考以下文章

js.erb 不在 Rails 6 中渲染

Rails 6.0.4 远程:true 不在浏览器中 js/ajax 渲染 _partial.html.erb

为啥 Rails 不自动生成视图文件?

$ 未在 Rails 应用程序中使用 Webpack 2 的 .js.erb 视图中定义

Rails:如何在多部分/替代电子邮件中使用部分(HTML 和纯文本)

Rails 不使用 application.html.erb