DEV Community

Cover image for 4 lines to Speed Up your Rails Test Suite on CircleCI
JetThoughts Dev for JetThoughts

Posted on • Edited on • Originally published at jetthoughts.com

4 lines to Speed Up your Rails Test Suite on CircleCI

Most of our projects have a big code base of assets which dramatically reduce not only browser page rendering but also increase passing test suites.

The Rails asset pipeline provides an assets:precompile rake task to allow assets to be compiled and cached up front rather than compiled every time the app boots.

We found that with precompiled assets all test suite is passed faster. For some project, we got 50% improvement.

This approach shows how you can skip compilation of assets every time you run a test.

Solution

This solution for CircleCI, but you could migrate it to other CI.

Add precompile assets step with caching result into .circle/config.yml:

      - restore_cache:
          keys:
            - v1-asset-cache-{{ arch }}-{{ .Branch }}
            - v1-asset-cache-

      - run: bundle exec rake assets:precompile

      - save_cache:
          key: v1-asset-cache-{{ arch }}-{{ .Branch }}-{{ epoch }}
          paths:
            - public/assets
            - tmp/cache/assets/sprockets
Enter fullscreen mode Exit fullscreen mode

and here complete CircleCI config.

Benchmark

We generated a simple *Rails 5 *project with Bootstrap and Foundation.

On this simple example we got 20% improvement.

There are 2 branches: master — with assets precompilation enabled and without-assets-precompilation without assets precompilation enabled

Extra: speedup Rails 4 system tests

On Rails 5, the asset digest is enabled by default which allows us to cache assets on a browser, but on Rails 4 you should add some changes in order to make it works.


Rails.application.configure do
  # ...
  # For Rails 4 we need to add those settings
  config.serve_static_files = true
  config.static_cache_control = 'public, max-age=2592000'
  config.assets.digest = true
  config.assets.debug = false

  if ENV['CI']
    config.assets.compile = false
    config.assets.js_compressor = :uglifier
  end
end
Enter fullscreen mode Exit fullscreen mode

Conclusion

This configuration allowed us to reduce and in most cases completely drop time on the assets compilation in tests.

If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories.

Top comments (0)