Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何测试特定资产(JS、CSS)在布局中是否可用?_Ruby On Rails_Ruby On Rails 4_Testing_Rspec_Asset Pipeline - Fatal编程技术网

Ruby on rails 如何测试特定资产(JS、CSS)在布局中是否可用?

Ruby on rails 如何测试特定资产(JS、CSS)在布局中是否可用?,ruby-on-rails,ruby-on-rails-4,testing,rspec,asset-pipeline,Ruby On Rails,Ruby On Rails 4,Testing,Rspec,Asset Pipeline,是否有可能——甚至是理智的——验证资产管道的特定部分在Rails应用程序的特定布局中可用 我正在安装一个新的Rails 4.2应用程序,其中包含Twitter引导程序4(包括其依赖项,如Tether)、Fontsome和DataTables。到目前为止,脚手架工作良好 由于整个过程都是关于web开发、自我控制(w.r.t.软件开发,即实际上坚持TDD和BDD的平衡组合)的培训,我想确保测试几乎所有可能出错的东西。这包括在所有需要的端点上提供上面提到的所有框架内容 最后,我想写以下内容: 描述'l

是否有可能——甚至是理智的——验证资产管道的特定部分在Rails应用程序的特定布局中可用

我正在安装一个新的Rails 4.2应用程序,其中包含Twitter引导程序4(包括其依赖项,如Tether)、Fontsome和DataTables。到目前为止,脚手架工作良好

由于整个过程都是关于web开发、自我控制(w.r.t.软件开发,即实际上坚持TDD和BDD的平衡组合)的培训,我想确保测试几乎所有可能出错的东西。这包括在所有需要的端点上提供上面提到的所有框架内容

最后,我想写以下内容:

描述'layouts/application.html.erb',类型::layout,js:true-do
它“有jQuery”做什么
提供
期望(render).有_js:jquery
结束
它“具有TWBS v4”功能
提供
期望(render).有_js:twbs4
期望(render).具有\u css:twbs4
结束
结束
显然,这些
。要有{js:jquery
。要有{js,css}:twbs4
需要在后台有一些东西,比如对
$.fn.jquery
的Javascript评估


测试这些东西是否明智?

测试你的资产是否明智、可能、甚至有用?当然不同类型的资产错误在不同的环境中以不同的方式影响应用程序,因此我建议以不同的方式测试它们:

  • 最好在测试中尽可能地发现资产问题,而不是等到应用程序进入预生产或生产环境。大部分Javascript和大量CSS都是应用程序正常运行所必需的。因此,如果您还没有,请编写一些验收测试(RSpec特性规范、Cucumber场景或类似测试),以测试您的重要页面是否正确加载和运行。它们将测试您的功能,并顺便测试影响功能的资产是否正在加载。测试任何基于Javascript的行为都可以检查Javascript资产。测试依赖CSS的行为特性(例如隐藏和显示的元素)是检查CSS资产的方法。编写测试重要场景所需的最少验收测试,这样您的测试套件就不会花费太多时间

    请注意,虽然通过应用程序功能让验收规范测试资产是有效的,但这也是唯一简单的方法。测试资产加载意味着测试正在运行的服务器,这意味着验收测试。Rails验收测试通常使用Capybara,它可以让您像用户一样单击web页面,但不能让您直接对HTML页面以外的内容发出HTTP请求。您可以通过将方法导入验收测试来实现这一点,但是

    • 正常验收测试已经测试了您的大部分资产,并且
    • 无论如何,您都需要在生产或预生产环境中进行一些测试(见下文)
    这可能不值得麻烦

  • 根据我的经验,有一些Javascript和CSS资产错误只出现在预生产或生产环境中,而图像和其他资产(如字体)的错误通常只出现在这些环境中。因此,在预生产环境中运行一些烟雾测试是很有价值的。我发现,使用curl获取一些URL(您的主页、其他重要页面类型的示例、重要资产)效果很好,或者您喜欢的方式,确保它们以HTTP状态200响应,并确保文本响应包含一些预期的字符串。由于许多纯生产资产错误实际上会破坏加载这些资产的所有页面(例如
    config/environments/production.rb
    中的错误),因此仅对少数页面进行冒烟测试就足以捕获大部分纯生产资产错误

上述策略只会发现影响应用程序中许多资产或页面的资产错误。如果您想测试每一项资产,您需要做更多的工作,以可维护的方式创建一个列表,并测试列表中的每个元素。我认为这不值得。无论如何,你都需要监控你的应用程序的400和500个错误;这将捕获上述策略所没有的较不常见的错误