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

9

我正在使用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 starting in single mode”和“Environment: test”? - Thomas Walpole
log/test.log 似乎跳过了服务器启动的输出,rspec 没有显示任何其他服务器日志。但是,如果我在被调用的控制器操作中添加 byebug 并调用 Rails.env,则会返回预期的测试。 - Dan
puma 输出应该只是 stdout,但我刚刚注意到你正在将 "harmony: true" 选项传递给 Uglifier。如果资源仍然具有 ES6 特性,则仅预编译资产不会产生任何区别。Capybara-webkit 不支持运行任何 ES6 特性,除非它们被转换为 ES5(使用 babel 等工具)并进行 polyfill,这意味着在最小化时不需要 harmony 选项(因为已经没有 ES6 代码需要最小化)。 - Thomas Walpole
感谢您发布带有代码的问题,这帮助我解决了ES6和Uglifier的另一个问题。 - Ravindra M
你是怎么解决这个问题的?我也遇到了同样的问题。 - marimaf
我不确定我是否曾经找到了解决方案。我目前正在使用webpacker来处理JS资产,其中包括babel来帮助自动将es6转换为向后兼容的JS,因此这对我来说不再是问题。 - Dan
1个回答

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接