Properties
Files
The files
array property specifies an array of source files or file name patterns.
In browser, the files will be loaded in the test sandbox in the order specified. If the loading of one of your scripts depends on another, you should list the second one before the first one. If you have a configuration file for Karma runner or runner HTML page, you can use the order of files from there.
Files may be of any type, not just JavaScript files, but also CSS files, JSON files, images and other types of files.
Make sure that all files used by your tests are listed in the config files
list. Wallaby.js uses its own cache to process/instrument files and run tests, so it has to copy used files there. For example, if you are loading some .json
files from your source code or tests (dynamically from browser tests or require('...')
in node.js), they have to be included in the files
list.
There are few exceptions from the rule:
- unless you have a specific use-case, the
node_modules
folder does not need to be included in thefiles
list, because wallaby uses the local version of it. - if you are using a module bundler for browser tests, such as
webpack
orbrowserify
you do not need to include folders with your external modules in thefiles
list (unless you would like to load some modules globally as opposed torequire
/import
them). - if you are using a middleware function for your browser tests and making an embedded web server to some of your local folders with libraries, like
node_modules
, then you do not need to include those folders in thefiles
list.
Tests
The tests
array property specifies an array of test files or test file name patterns. IMPORTANT: only actual test files should be specified in the tests list, i.e. the files with specs/tests (for example with describe
/it
for mocha
/jasmine
). Any test helpers or testing frameworks extensions should be specified in the files
list (normally at the end of the list).
Both files and tests paths are specified relative to the location of the wallaby.js configuration file.
For example, the configuration sample below makes wallaby.js track all .js
files in the src
folder, as well as a CSS file and an HTML file. The sample also includes all test files from the test
folder whose name ends with Spec
.
{
"files": [
"style/calculator.css",
"html/calculator.html",
"src/**/*.js"
],
"tests": [
"test/**/*Spec.js"
]
}
Files and tests are the only mandatory configuration properties; the rest are optional. (Please note that jasmine v3 is the default testing framework.)
Both files
and tests
properties support glob patterns, so you can use wildcards, etc. to avoid specifying each and every file.
File object
Both files
and tests
property elements can either be a string representing a file name/name pattern, or an object that defines additional properties.
module.exports = function (wallaby) {
return {
files: [
'src/**/*.js',
// is the same as
{ pattern: 'src/**/*.js', instrument: true, load: true, ignore: false }
],
tests: [
'test/**/*Spec.js'
]
};
};
Pattern
The pattern
string property represents the file name or pattern. Each file is checked against patterns from the top of the list to the bottom. If a file satisfies multiple patterns, the first file configuration (from the top of the list) with a matching pattern will be used for the file. The rule applies to all file configuration properties, except the ignore
property - if a file pattern is marked as ignored, it will be ignored regardless of its position in the files
/tests
list.
Ignore
The ignore
boolean property (false
by default) is used to completely exclude the file from being processed by wallaby.js. The setting may be useful for adjusting some broader patterns. Note that if you’d like to ignore a file, you can also just add an exclamation mark as the first character of the path to negate the ignore
property (which is false
by default). For example, if your tests are in the same folder as your source files, your config may look as follows:
{
"files": [
"src/**/*.js",
"!src/**/*Spec.js"
],
"tests": [
"src/**/*Spec.js"
]
}
Instrument
The instrument
boolean property (true
by default) determines whether the file is instrumented. Setting the property to false stops the file from being compiled, disables file code coverage reporting, and prevents file changes from triggering automatic test execution. The setting should normally be set to false
for libraries, utils and other rarely changing files. Using the setting makes wallaby.js run your code faster, as it doesn’t have to perform unnecessary work.
module.exports = function (wallaby) {
return {
files: [
{ pattern: 'libs/jquery.js', instrument: false }
],
...
};
};
Sometimes you may just need to exclude a file from code coverage calculation, or disable code coverage for certain functions, statements or logical branches.
Load
The load
boolean property (default value: true
) determines whether the file is loaded to the sandbox HTML (via the script tag in case of JavaScript files). Setting the property to false
is useful if you are using some alternative script loading mechanism, such as RequireJs or Webpack/Browserify.
module.exports = function (wallaby) {
return {
files: [
{ pattern: 'src/**/*.js', load: false }
],
...
};
};
Note that if your browser tests or code load some files dynamically and you don’t want them to be loaded into your sandbox immediately via script
tags, you still need them in your files list, with load: false
flag so that wallaby.js can serve them on its embedded web server.
Binary
The binary
boolean property (false
by default) tells wallaby whether the file is binary (this affects how the file gets copied to wallaby cache). While in most cases wallaby is able to figure it out automatically, the flag can be useful when your binary file extension is not a well-known binary file extension, like images or archives.
module.exports = function (wallaby) {
return {
files: [
{ pattern: 'src/**/*.myBinaryExt', binary: true }
],
...
};
};
hideFromErrorStackTrace
The hideFromErrorStackTrace
boolean property (false
by default) tells wallaby whether the file should be displayed in error stack traces reported by the tool.
Overriding defaults
If you would like to override the default values for file object properties, you may use wallaby
parameter defaults
property. For example, if most of the items in your configuration files list should have instrument
property set to false, you may override the default property value as follows:
module.exports = function (wallaby) {
wallaby.defaults.files.instrument = false;
return {
files: [
'libs/lib1.js',
'libs/lib2.js',
'libs/lib3.js',
'libs/lib4.js',
{ pattern: 'src/**/*.js', instrument: true }
],
tests: [
'test/**/*Spec.js'
]
};
};
Note, that the defaults for files
and tests
are set separately, so in the example above all tests will be instrumented. To set the test defaults in that example, you can use the wallaby.defaults.tests
object.
Overriding Automatic Configuration
If your project uses automatic configuration, your files
and tests
properties will be automatically set based on your project’s configuration. There are two ways to configure different or additional files
and tests
when using automatic configuration:
Modify automatic configuration files
and/or tests
You may modify the files
and/or tests
properties that are automatically set by Wallaby’s automatic configuration by creating a files
or tests
property with an object containing an override function:
module.exports = () => ({
// modify `files` automatic configuration settings
files: {
override: (filePatterns) => {
// TODO: modify `filePatterns` array as required
return filePatterns;
}
},
// modify `tests` automatic configuration settings
tests: {
override: (testPatterns) => {
// TODO: modify `testPatterns` array as required
return testPatterns;
}
}
});
Replace automatic configuration files
and/or tests
You may force Wallaby to completely ignore the files
and/or tests
properties that are automatically set by Wallaby’s automatic configuration by creating a files
or tests
property with an array of patterns.
module.exports = () => ({
autoDetect: true,
// modify `files` automatic configuration settings
files: [
"src/**/*.js",
],
// modify `tests` automatic configuration settings
tests: [
"test/**/*.spec.js",
]
});
Dotfiles and hidden folders (prefixed with dot)
By default, Wallaby’s glob matcher doesn’t allow patterns to match filenames starting with a period. To allow such pattern matching you may use the dot: true
setting in your Wallaby config:
module.exports = () => ({
files: [
...
],
tests: [
...
],
dot: true
});
Example
To sum it up, the configuration sample below makes wallaby.js track all .js
files in the src
folder and all its subfolders recursively, excluding any files whose name ends with .generated
; include but avoid instrumenting libraries in libs
folder; and include but avoid instrumenting test helpers (such as testing frameworks configuration scripts, custom matcher, etc.). The sample also includes all test files from the test
folder whose name ends with Spec
.
{
"files": [
"src/**/*.js",
{ "pattern": "src/**/*.generated.js", "ignore": true },
{ "pattern": "libs/*.js", "instrument": false },
{ "pattern": "test/helpers/*.js", "instrument": false },
],
"tests": [
"test/**/*Spec.js"
]
}