title: Proper Rails solution to manifest.json not existing on the CI
body: <p>When my tests run on CI, Heroku's specifically, they raise this error:</p>
  <pre><code>Webpacker can't find application.js in /app/public/packs-test/manifest.json. Possible causes
  </code></pre>
  <p>which I believe it's just because the frontend assets haven't been compiled. What's the correct Rails way of solving it?</p>
  <p>For example, I found that if I add</p>
  <pre><code>&quot;test-setup&quot;: &quot;bundle exec rake webpacker:compile&quot;,
  </code></pre>
  <p>to my scripts for Heroku, it works, but this feels a bit like a workaround and not the proper solution. A proper solution would be something that makes Rails compile assets automatically when running tests, right? Something that doesn't depend on CI configuration.</p>
  <p>The full error is:</p>
  <pre><code>  1) /friendships when logged in gets a list of friends
       Failure/Error: &lt;%= javascript_pack_tag &quot;application&quot;, &quot;data-turbolinks-track&quot;: &quot;reload&quot; %&gt;
       ActionView::Template::Error:
         Webpacker can't find application.js in /app/public/packs-test/manifest.json. Possible causes:
         1. You want to set webpacker.yml value of compile to true for your environment
            unless you are using the `webpack -w` or the webpack-dev-server.
         2. webpack has not yet re-run to reflect updates.
         3. You have misconfigured Webpacker's config/webpacker.yml file.
         4. Your webpack configuration is not creating a manifest.
         Your manifest contains:
         {
         }
       # ./app/views/layouts/application.html.erb:30:in `_app_views_layouts_application_html_erb___487359012740265845_49820'
       # ./spec/requests/friendships_spec.rb:34:in `block (3 levels) in &lt;top (required)&gt;'
       # ------------------
       # --- Caused by: ---
       # Webpacker::Manifest::MissingEntryError:
       #   Webpacker can't find application.js in /app/public/packs-test/manifest.json. Possible causes:
       #   1. You want to set webpacker.yml value of compile to true for your environment
       #      unless you are using the `webpack -w` or the webpack-dev-server.
       #   2. webpack has not yet re-run to reflect updates.
       #   3. You have misconfigured Webpacker's config/webpacker.yml file.
       #   4. Your webpack configuration is not creating a manifest.
       #   Your manifest contains:
       #   {
       #   }
       #   ./app/views/layouts/application.html.erb:30:in `_app_views_layouts_application_html_erb___487359012740265845_49820'
  </code></pre>
  <p>Webpacker is configured to compile in test mode (as default):</p>
  <pre><code># Note: You must restart bin/webpack-dev-server for changes to take effect
  
  default: &amp;default
    source_path: app/javascript
    source_entry_path: packs
    public_root_path: public
    public_output_path: packs
    cache_path: tmp/cache/webpacker
    webpack_compile_output: true
  
    # Additional paths webpack should lookup modules
    # ['app/assets', 'engine/foo/app/assets']
    additional_paths: [ ]
  
    # Reload manifest.json on all requests so we reload latest compiled packs
    cache_manifest: false
  
    # Extract and emit a css file
    extract_css: false
  
    static_assets_extensions:
      - .jpg
      - .jpeg
      - .png
      - .gif
      - .tiff
      - .ico
      - .svg
      - .eot
      - .otf
      - .ttf
      - .woff
      - .woff2
  
    extensions:
      - .mjs
      - .js
      - .sass
      - .scss
      - .css
      - .module.sass
      - .module.scss
      - .module.css
      - .png
      - .svg
      - .gif
      - .jpeg
      - .jpg
  
  development:
    &lt;&lt;: *default
    compile: true
  
    # Reference: https://webpack.js.org/configuration/dev-server/
    dev_server:
      https: false
      host: localhost
      port: 3035
      public: localhost:3035
      hmr: false
      # Inline should be set to true if using HMR
      inline: true
      overlay: true
      compress: true
      disable_host_check: true
      use_local_ip: false
      quiet: false
      pretty: false
      headers:
        'Access-Control-Allow-Origin': '*'
      watch_options:
        ignored: '**/node_modules/**'
  
  test:
    &lt;&lt;: *default
    compile: true
  
    # Compile test packs to a separate directory
    public_output_path: packs-test
  
  staging:
    &lt;&lt;: *default
  
    # Staging depends on precompilation of packs prior to booting for performance.
    compile: false
  
    # Extract and emit a css file
    extract_css: true
  
    # Cache manifest.json for performance
    cache_manifest: true
  
  production:
    &lt;&lt;: *default
  
    # Production depends on precompilation of packs prior to booting for performance.
    compile: false
  
    # Extract and emit a css file
    extract_css: true
  
    # Cache manifest.json for performance
    cache_manifest: true
  </code></pre>