未使用 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 测试环境中的预编译资产的主要内容,如果未能解决你的问题,请参考以下文章