如何测试特定资产(JS,CSS)在布局中是否可用?
How to test that specific assets (JS, CSS) are available in layouts?
是否有可能——甚至理智——验证资产管道的特定部分在 Rails 应用的特定布局中是否可用?
我正在使用 Twitter Bootstrap 4(包括它的依赖项,例如 Tether)、FontAwesome 和 DataTables 设置一个新的 Rails 4.2 应用程序。目前脚手架运行良好。
因为整个事情是关于网络开发、自我控制的培训(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
需要在后台有一些东西,例如 Javascript 对 $.fn.jquery
的评估。
测试这样的东西是否明智?
测试您的资产是否理智、可能甚至有用?当然!不同类型的资产错误会以不同的方式在不同的环境中影响您的应用,因此我建议以不同的方式对其进行测试:
最好在测试中尽可能地发现资产问题,而不是等到您的应用进入预生产或生产环境。您的大部分 Javascript 和很多 CSS 都是您的应用程序正常运行所必需的。因此,如果您还没有,请编写一些验收测试(RSpec 功能规范、Cucumber 场景或类似的东西)来测试您的重要页面是否正确加载和运行。他们既会测试您的功能,也会顺便测试影响功能的资产是否正在加载。测试任何基于 Javascript 的行为都可以检查 Javascript 资产。测试依赖于 CSS 的行为特征,例如隐藏和显示的元素,是检查 CSS 资产的方法。编写测试重要场景所需的最少验收测试,这样您的测试套件就不会花很长时间。
请注意,虽然让您的验收规范通过应用程序功能测试您的资产是有效的,但这也是唯一直接的方法。测试资产加载就是测试一个运行ning服务器,也就是验收测试。 Rails 验收测试通常使用 Capybara,它可以让您像用户一样点击网页,但不会让您直接向 HTML 页面以外的其他内容发出 HTTP 请求。您可以通过将 Rack::Test
方法导入您的验收测试来做到这一点,但考虑到
- 正常验收测试已经测试了您的大部分资产,并且
- 无论如何,您都需要在生产或预生产环境中进行一些测试(见下文)
这可能不值得麻烦。
根据我的经验,有 类 的 Javascript 和 CSS 只出现在预生产或生产环境中的资产错误,以及图像错误和字体等其他资产通常 仅 出现在这些环境中。因此,运行 在您的预生产环境中进行一些冒烟测试很有价值。我发现使用 curl 或任何你喜欢的方式获取一些 URL(你的主页、其他重要页面类型的示例、重要资产)效果非常好,确保它们以 HTTP 状态 200 响应,并确保文本响应包含一些预期的字符串。由于许多仅限生产的资产错误实际上会破坏加载这些资产的所有页面(例如 config/environments/production.rb
中的错误),因此仅对少数页面进行冒烟测试就足以捕获大多数仅限生产的资产错误。
以上策略只能找到影响您应用中许多资产或页面的资产错误。如果您想测试每一项资产,您需要做更多的工作来以可维护的方式制作列表并测试列表的每个元素。我认为这不值得。无论如何,您需要监控应用程序的 400 和 500 错误;这将捕捉到上述策略没有捕捉到的不太常见的错误。
是否有可能——甚至理智——验证资产管道的特定部分在 Rails 应用的特定布局中是否可用?
我正在使用 Twitter Bootstrap 4(包括它的依赖项,例如 Tether)、FontAwesome 和 DataTables 设置一个新的 Rails 4.2 应用程序。目前脚手架运行良好。
因为整个事情是关于网络开发、自我控制的培训(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
需要在后台有一些东西,例如 Javascript 对 $.fn.jquery
的评估。
测试这样的东西是否明智?
测试您的资产是否理智、可能甚至有用?当然!不同类型的资产错误会以不同的方式在不同的环境中影响您的应用,因此我建议以不同的方式对其进行测试:
最好在测试中尽可能地发现资产问题,而不是等到您的应用进入预生产或生产环境。您的大部分 Javascript 和很多 CSS 都是您的应用程序正常运行所必需的。因此,如果您还没有,请编写一些验收测试(RSpec 功能规范、Cucumber 场景或类似的东西)来测试您的重要页面是否正确加载和运行。他们既会测试您的功能,也会顺便测试影响功能的资产是否正在加载。测试任何基于 Javascript 的行为都可以检查 Javascript 资产。测试依赖于 CSS 的行为特征,例如隐藏和显示的元素,是检查 CSS 资产的方法。编写测试重要场景所需的最少验收测试,这样您的测试套件就不会花很长时间。
请注意,虽然让您的验收规范通过应用程序功能测试您的资产是有效的,但这也是唯一直接的方法。测试资产加载就是测试一个运行ning服务器,也就是验收测试。 Rails 验收测试通常使用 Capybara,它可以让您像用户一样点击网页,但不会让您直接向 HTML 页面以外的其他内容发出 HTTP 请求。您可以通过将
Rack::Test
方法导入您的验收测试来做到这一点,但考虑到- 正常验收测试已经测试了您的大部分资产,并且
- 无论如何,您都需要在生产或预生产环境中进行一些测试(见下文)
这可能不值得麻烦。
根据我的经验,有 类 的 Javascript 和 CSS 只出现在预生产或生产环境中的资产错误,以及图像错误和字体等其他资产通常 仅 出现在这些环境中。因此,运行 在您的预生产环境中进行一些冒烟测试很有价值。我发现使用 curl 或任何你喜欢的方式获取一些 URL(你的主页、其他重要页面类型的示例、重要资产)效果非常好,确保它们以 HTTP 状态 200 响应,并确保文本响应包含一些预期的字符串。由于许多仅限生产的资产错误实际上会破坏加载这些资产的所有页面(例如
config/environments/production.rb
中的错误),因此仅对少数页面进行冒烟测试就足以捕获大多数仅限生产的资产错误。
以上策略只能找到影响您应用中许多资产或页面的资产错误。如果您想测试每一项资产,您需要做更多的工作来以可维护的方式制作列表并测试列表的每个元素。我认为这不值得。无论如何,您需要监控应用程序的 400 和 500 错误;这将捕捉到上述策略没有捕捉到的不太常见的错误。