验证 Assets 管道的特定部分在 Rails 应用的特定布局中是否可用——甚至是理智的——是否可行?
我正在使用 Twitter Bootstrap 4(包括它的依赖项,如 Tether)、FontAwesome 和 DataTables 设置一个新的 Rails 4.2 应用程序。脚手架目前运行良好。
因为整个事情是关于网络开发、 self 控制(w.r.t. 软件开发,即实际上坚持 TDD 和 BDD 的平衡组合)的培训,所以我想确保测试几乎所有可能出错的东西.这包括在需要的所有端点上提供上述所有框架内容。
最终,我想写如下内容:
describe 'layouts/application.html.erb', type: :layout, js: true do
it 'has jQuery' do
render
expect(render).to have_js :jquery
end
it 'has TWBS v4' do
render
expect(render).to have_js :twbs4
expect(render).to have_css :twbs4
end
end
显然,这些 .to have_js :jquery
和 .to have_{js,css} :twbs4
需要在后台有一些东西,例如 $.fn.jquery
的 Javascript 评估.
测试这样的东西是否明智?
最佳答案
测试您的 Assets 是否明智、可能甚至有用?当然!不同类型的 Assets 错误会以不同的方式在不同的环境中影响您的应用,因此我建议以不同的方式对其进行测试:
最好在测试中尽可能发现 Assets 问题,而不是等到您的应用进入预生产或生产环境。您的大部分 Javascript 和大量 CSS 都是您的应用程序正常运行所必需的。因此,如果您还没有编写一些验收测试(RSpec 功能规范、Cucumber 场景或类似的东西)来测试您的重要页面是否正确加载和运行。他们既会测试您的功能,也会顺便测试影响功能的 Assets 是否正在加载。测试任何基于 Javascript 的行为都可以检查 Javascript Assets 。测试依赖于 CSS 的行为特征,例如隐藏和显示的元素,是检查 CSS Assets 的方法。编写测试重要场景所需的最少验收测试,这样您的测试套件就不会花很长时间。
请注意,虽然让您的验收规范通过应用功能测试您的 Assets 很有效,但这也是唯一直接的方法。测试 Assets 加载意味着测试正在运行的服务器,这意味着验收测试。 Rails 验收测试通常使用 Capybara,它可以让您像用户一样点击网页,但不会让您直接向 HTML 页面以外的内容发出 HTTP 请求。您可以通过导入
Rack::Test
来做到这一点方法进入您的验收测试,但考虑到这一点- 正常的验收测试已经测试了您的大部分 Assets ,并且
- 无论如何,您都需要在生产或预生产环境中进行一些测试(见下文)
这可能不值得麻烦。
根据我的经验,有些类的 Javascript 和 CSS Assets 错误只出现在一个人的预生产或生产环境中,而图像和其他 Assets (如字体)的错误通常仅出现在那些环境中。因此,在您的预生产环境中运行一些冒烟测试是很有值(value)的。我发现使用 curl 或任何你喜欢的方式获取一些 URL(你的主页、其他重要页面类型的示例、重要 Assets )效果非常好,确保它们以 HTTP 状态 200 响应,并确保文本响应包含一些预期的字符串。由于许多仅用于生产的 Assets 错误实际上会破坏加载这些 Assets 的所有页面(例如
config/environments/production.rb
中的错误),因此仅对少数页面进行冒烟测试就足以捕获大部分生产-仅 Assets 错误。
上述策略只会发现影响您应用中许多 Assets 或页面的 Assets 错误。如果您想测试每一项 Assets ,您需要做更多的工作来以可维护的方式制作列表并测试列表的每个元素。我认为这不值得。无论如何,您需要监控应用程序的 400 和 500 错误;这将捕捉到上述策略没有捕捉到的不太常见的错误。
关于ruby-on-rails - 如何测试特定 Assets (JS、CSS)在布局中是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35587835/