Rails资产管道测试通过生产破坏

时间:2012-06-12 08:20:03

标签: ruby-on-rails-3 testing asset-pipeline

我在资产管道方面遇到以下问题。

  • 我有一封带有图片的HTML电子邮件。
  • 我的测试涵盖了成功发送电子邮件的情况。
  • 所有测试都通过。
  • 在开始制作时,要求发送电子邮件的功能被破坏,因为HTML布局引用了不存在的图像。

这显然适用于所有预编译资产。

在我看来,突然测试不再可靠。有没有办法避免这种情况再次发生?

2 个答案:

答案 0 :(得分:13)

我从自己的案例中找到了完美的解决方案。如果你设置

 config.assets.compile = false 
 config.assets.digest = true

在测试环境中,您的测试将依赖于预编译资产。

由于在快速开发和测试阶段每次预编译资产都很烦人,在我的情况下,仅在CI上进行此配置就足够了。

您可以使用以下命令设置名为ci_config.rb的初始值设定项:

if ENV['CI'] 
  class YourApp::Application
    config.assets.compile = false
    config.assets.digest = true 
  end
end

并配置CI运行rake资产:启动时预编译和rake资产:清理结束。

答案 1 :(得分:2)

比较application.rb,production.rb和development.rb中的默认配置选项,并阅读Configuring Rails Applications in Ruby on Rails Guide以了解选项。

重要选项如下:

config.serve_static_assets:将此设置为false(默认生产),然后,rails将不会提供静态内容。

config.assets.compile:是否需要使用资产管道编译资产进行编译。

如果将以上两个选项设置为false(这是生产的默认选项),那么您需要1)预编译并将静态内容放置在适当的位置,2)配置Web服务器(apache或nginx,可能是)根据需要提供静态内容。

因此,对于生产,您不仅需要放置文件,还需要配置Web服务器来为它们提供服务,或者您可以配置serve_static_assets以即时创建资产。您可能需要调整测试配置,但测试serve_static_assets为真,除非您更改它。