运行rake资产:在测试之前预编译包括:js标记,否则跳过

时间:2017-09-29 00:48:35

标签: ruby-on-rails ruby rspec

tl; dr -

只有在正在运行的测试体中包含rake assets:precompile测试时,是否可以运行单个命令(例如:js)?

-

我正在开发一个拥有大型rspec测试套件的rails 5,ruby 2.3.1应用。

我们最近在应用程序中安装了webpacker gem,这导致我们必须运行:

$ bundle exec rake assets:precompile

在运行测试之前。如果未运行上述命令,则将针对最近预编译的资产运行测试。

这引起了一些令人头疼的事情,因为开发人员已经忘记了这一步,然后撞到墙上,直到有人记得在运行测试套件之前运行它。

理想情况下,我只想添加到spec/spec_helper.rb

config.before(:suite) do
  system('bundle exec rake assets:precompile')
end

但是,这将在每次运行测试套件或其中的任何子集之前运行预编译。这将大大减慢后端开发人员的开发时间,后者只是尝试运行通常需要0.15秒的单个请求规范。

此外,我们通常会在使用:js进行开发时跳过运行guard测试,因为它们花费的时间太长。我们只需在部署或推送到远程分支之前运行:js规范作为健全性检查。

不幸的是,将{:js => true}选项添加到:

config.before(:suite, js:true)

也不起作用,因为before(:suite)忽略了选项。

1 个答案:

答案 0 :(得分:5)

使用:js代码进行过滤,并为所有规格运行一次。

  ENV[ 'ASSET_PRECOMPILE_DONE' ] = nil

  config.before(:each, :js) do
    if ! ENV[ 'ASSET_PRECOMPILE_DONE' ]
      system 'bundle exec rake assets:precompile'
      ENV[ 'ASSET_PRECOMPILE_DONE' ] = 'true'
    end
  end