Skip to content

Commit

Permalink
Adds tests for environment.toWebpackConfig (#1099)
Browse files Browse the repository at this point in the history
* Adds tests for default webpack package config

Adds a root module to the npm pacakge to make it possible to customize
the RAILS_ROOT location. Supporting this approach means ensuring that
relative paths for various Webpack configuration items resolve relative
to the given root if it exists.
  • Loading branch information
rossta authored and gauravtiwari committed Dec 15, 2017
1 parent 694f5a8 commit 6bccc41
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 2 deletions.
77 changes: 77 additions & 0 deletions package/__tests__/environment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/* global test expect, describe */

// environment.js expects to find config/webpacker.yml and resolved modules from
// the root of a Rails project
const cwd = process.cwd();
const chdirApp = () => process.chdir('test/test_app')
const chdirCwd = () => process.chdir(cwd)
chdirApp();

const { resolve, join } = require('path')
const { sync } = require('glob')
const assert = require('assert')

const { ConfigList, ConfigObject } = require('../config_types')

const Environment = require('../environment')

describe('Environment', () => {
afterAll(chdirCwd);

let environment;

describe('toWebpackConfig', () => {
beforeEach(() => {
environment = new Environment()
})

test('should return entry', () => {
const config = environment.toWebpackConfig()
expect(config.entry.application).toEqual(resolve('app', 'javascript', 'packs', 'application.js'))
})

test('should return output', () => {
const config = environment.toWebpackConfig()
expect(config.output.filename).toEqual('[name]-[chunkhash].js')
expect(config.output.chunkFilename).toEqual('[name]-[chunkhash].chunk.js')
expect(config.output.path).toEqual(resolve('public', 'packs-test'))
expect(config.output.publicPath).toEqual('/packs-test/')
})

test('should return default loader rules for each file in config/loaders', () => {
const config = environment.toWebpackConfig()
const rules = Object.keys(require('../rules'))
const [{ oneOf: configRules }] = config.module.rules;

expect(rules.length).toBeGreaterThan(1)
expect(configRules.length).toEqual(rules.length)
})

test('should return default plugins', () => {
const config = environment.toWebpackConfig()
expect(config.plugins.length).toEqual(4)
})

test('should return default resolveLoader', () => {
const config = environment.toWebpackConfig()
expect(config.resolveLoader.modules).toEqual(['node_modules'])
})

test('should return default resolve.modules with additions', () => {
const config = environment.toWebpackConfig()
expect(config.resolve.modules).toEqual([
resolve('app', 'javascript'),
'node_modules',
'app/assets',
'/etc/yarn',
])
})

test('returns plugins property as Array', () => {
const config = environment.toWebpackConfig()

expect(config.plugins).toBeInstanceOf(Array)
expect(config.plugins).not.toBeInstanceOf(ConfigList)
})
})
})
1 change: 1 addition & 0 deletions package/utils/__tests__/objectify.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* global test expect */
console.log('objectify test cwd', process.cwd());

const objectify = require('../objectify')

Expand Down
10 changes: 10 additions & 0 deletions test/test_app/app/javascript/packs/application.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* eslint no-console:0 */
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
//
// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
// layout file, like app/views/layouts/application.html.erb

console.log('Hello World from Webpacker')
65 changes: 65 additions & 0 deletions test/test_app/config/webpacker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Note: You must restart bin/webpack-dev-server for changes to take effect

default: &default
source_path: app/javascript
source_entry_path: packs
public_output_path: packs
cache_path: tmp/cache/webpacker

# Additional paths webpack should lookup modules
# ['app/assets', 'engine/foo/app/assets']
resolved_paths:
- app/assets
- /etc/yarn

# Reload manifest.json on all requests so we reload latest compiled packs
cache_manifest: false

extensions:
- .coffee
- .erb
- .js
- .jsx
- .ts
- .vue
- .sass
- .scss
- .css
- .png
- .svg
- .gif
- .jpeg
- .jpg

development:
<<: *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
disable_host_check: true
use_local_ip: false

test:
<<: *default
compile: true

# Compile test packs to a separate directory
public_output_path: packs-test

production:
<<: *default

# Production depends on precompilation of packs prior to booting for performance.
compile: false

# Cache manifest.json for performance
cache_manifest: true
21 changes: 19 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,13 @@ date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"

debug@^2.2.0, debug@^2.6.8:
debug@^2.2.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
dependencies:
ms "0.7.2"

debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
Expand Down Expand Up @@ -2290,7 +2296,18 @@ glob@^6.0.4:
once "^1.3.0"
path-is-absolute "^1.0.0"

glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"

glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
Expand Down

0 comments on commit 6bccc41

Please sign in to comment.