未使用 Rails 测试环境中的预编译资产

Posted

技术标签:

【中文标题】未使用 Rails 测试环境中的预编译资产【英文标题】:Precompiled assets in Rails test environment not used 【发布时间】:2017-11-22 09:06:57 【问题描述】:

我使用的是 Rails 5.1.1,对于我们的 rspec 功能测试,我们希望在运行所有功能测试之前使用预编译资产。 (主要是因为capybara-webkit不支持javascript es6特性)

资产使用RAILS_ENV=test rake assets:precompile 成功预编译,但是 capybara-webkit 似乎没有使用预编译的资产。

config/environment/test.rb 看起来像这样

config.assets.prefix = "/assets_test"
config.assets.compile = true
config.serve_static_assets = true
config.assets.js_compressor = Uglifier.new(
  harmony: true #es6 support
)

我需要添加什么来测试使用预编译的资产?

【问题讨论】:

当您运行测试时,您从 Puma 得到什么输出?是否包括“Puma 以单一模式启动”和“环境:测试” log/test.log 似乎跳过了服务器启动的输出,并且 rspec 不显示任何其他服务器日志。但是,如果我在被调用的控制器操作中添加一个 byebug 并调用 Rails.env 它会按预期返回测试。 puma 输出应该只是标准输出,但是我刚刚注意到您传递给 Uglifier 的“harmony: true”选项。如果它们仍然具有 ES6 特性,那么仅仅预编译你的资产不会有什么不同。 Capybara-webkit 不支持运行任何 ES6 功能而不将它们转换为 ES5(babel 等)和 polyfill,这意味着缩小时不需要harmony 选项(因为没有 ES6 代码左缩小)。 感谢您使用代码发布您的问题,这帮助我解决了 ES6 和 Uglifier 的其他问题之一。 你是怎么解决这个问题的?我有同样的问题 【参考方案1】:

您需要在 test.rb 中设置 config.assets.compile = false 以向 Rails 表明它应该只使用静态(预编译)资产。

【讨论】:

以上是关于未使用 Rails 测试环境中的预编译资产的主要内容,如果未能解决你的问题,请参考以下文章

.env 未使用 rspec 在 Rails 的测试环境中加载

ruby Rails 4/5通过资产预编译测试加速

Rails:预编译资产缺少节点模块

未检测到 Rails 预编译资产 Yarn 可执行文件

Rails 5,Rspec:架构中未找到环境数据

无法正确编译和部署 Rails 资产