Add --require feature to ospec executable (#2144)
* Allow requires before running tests This enables requiring modules like `esm` before any test files are loaded. * Update ospec documentation Also add documentation for `--require` option * Update ospec change-log.md * [opsec] move the change log item to v2.0 * [ospec] tweak the docs
This commit is contained in:
parent
43053c6088
commit
91b08c6491
3 changed files with 42 additions and 18 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
ospec [](https://www.npmjs.com/package/ospec) [](https://www.npmjs.com/package/ospec)
|
ospec [](https://www.npmjs.com/package/ospec) [](https://www.npmjs.com/package/ospec)
|
||||||
=====
|
=====
|
||||||
|
|
||||||
[About](#about) | [Usage](#usage) | [API](#api) | [Goals](#goals)
|
[About](#about) | [Usage](#usage) | [CLI](#command-line-interface) | [API](#api) | [Goals](#goals)
|
||||||
|
|
||||||
Noiseless testing framework
|
Noiseless testing framework
|
||||||
|
|
||||||
|
|
@ -288,7 +288,7 @@ _o("a test", function() {
|
||||||
_o.run()
|
_o.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
### Running the test suite from the command-line
|
## Command Line Interface
|
||||||
|
|
||||||
Create a script in your package.json:
|
Create a script in your package.json:
|
||||||
```
|
```
|
||||||
|
|
@ -303,43 +303,51 @@ Create a script in your package.json:
|
||||||
$ npm test
|
$ npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
ospec will by default evaluate all `*.js` files in any sub-folder named `/tests` - ignoring files inside the `node_modules` folder.
|
|
||||||
|
|
||||||
So, running ospec without arguments is thus effectively the same as:
|
|
||||||
|
|
||||||
```
|
|
||||||
ospec '**/tests/**/*.js'
|
|
||||||
```
|
|
||||||
|
|
||||||
**NOTE:** `o.run()` is automatically called by the cli - no need to call it in your test code.
|
**NOTE:** `o.run()` is automatically called by the cli - no need to call it in your test code.
|
||||||
|
|
||||||
ospec accepts a list of file-patterns (globs) giving you full control over which files are evaluated:
|
### CLI Options
|
||||||
|
|
||||||
|
Running ospec without arguments is equivalent to running `ospec '**/tests/**/*.js'`. In english, this tells ospec to evaluate all `*.js` files in any sub-folder named `tests/` (the `node_modules` folder is always excluded).
|
||||||
|
|
||||||
|
If you wish to change this behavior, just provide one or more glob match patterns:
|
||||||
|
|
||||||
```
|
```
|
||||||
ospec '**/tests/**/*.js' '**/*.test.js'
|
ospec '**/spec/**/*.js' '**/*.spec.js'
|
||||||
```
|
```
|
||||||
|
|
||||||
Also, if you wish to skip some files (**in addition to** those under `node_modules`) add a `--ignore` flag with a list of file-patterns to ignore, like so:
|
You can also provide ignore patterns (note: always add `--ignore` AFTER match patterns):
|
||||||
|
|
||||||
```
|
```
|
||||||
ospec --ignore 'folder1/**' 'folder2/**'
|
ospec --ignore 'folder1/**' 'folder2/**'
|
||||||
```
|
```
|
||||||
|
|
||||||
...or:
|
Finally, you may choose to load files or modules before any tests run (**note:** always add `--require` AFTER match patterns):
|
||||||
|
|
||||||
```
|
```
|
||||||
ospec '**/*.test.js' '**/*-test.js' --ignore 'folder1/**' 'folder2/**'
|
ospec --require esm
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here's an example of mixing them all together:
|
||||||
|
|
||||||
|
```
|
||||||
|
ospec '**/*.test.js' --ignore 'folder1/**' --require esm ./my-file.js
|
||||||
|
```
|
||||||
|
|
||||||
#### Direct use from the command line
|
### Run ospec directly from the command line:
|
||||||
|
|
||||||
Ospec doesn't work when installed globally. Using global scripts is generally a bad idea since you can end up with different, incompatible versions of the same package installed locally and globally.
|
ospec comes with an executable named `ospec`. NPM auto-installs local binaries to `./node_modules/.bin/`. You can run ospec by running `./node_modules/.bin/ospec` from your project root, but there are more convenient methods to do so that we will soon describe.
|
||||||
|
|
||||||
|
ospec doesn't work when installed globally (`npm install -g`). Using global scripts is generally a bad idea since you can end up with different, incompatible versions of the same package installed locally and globally.
|
||||||
|
|
||||||
|
Here are different ways of running ospec from the command line. This knowledge applies to not just ospec, but any locally installed npm binary.
|
||||||
|
|
||||||
|
#### npx
|
||||||
|
|
||||||
If you're using a recent version of npm (v5+), you can use run `npx ospec` from your project folder.
|
If you're using a recent version of npm (v5+), you can use run `npx ospec` from your project folder.
|
||||||
|
|
||||||
Otherwise, to work around this limitation, you can use [`npm-run`](https://www.npmjs.com/package/npm-run) which enables one to run the binaries of locally installed packages.
|
#### npm-run
|
||||||
|
|
||||||
|
If you're using an older NPM version, you can use [`npm-run`](https://www.npmjs.com/package/npm-run) which enables one to run the binaries of locally installed packages as npx would.
|
||||||
|
|
||||||
```
|
```
|
||||||
npm install npm-run -g
|
npm install npm-run -g
|
||||||
|
|
@ -351,6 +359,16 @@ Then, from a project that has ospec installed as a (dev) dependency:
|
||||||
npm-run ospec
|
npm-run ospec
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### PATH
|
||||||
|
|
||||||
|
If you understand how your system's PATH works (e.g. for [OSX](https://coolestguidesontheplanet.com/add-shell-path-osx/)), then you can add the following to your PATH...
|
||||||
|
|
||||||
|
```
|
||||||
|
export PATH=./node_modules/.bin:$PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
...and you'll be able to run `ospec` without npx, npm, etc. This one-time setup will also work with other binaries across all your node projects, as long as you run binaries from the root of your projects.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,10 @@ const globList = args.globs && args.globs.length ? args.globs : ["**/tests/**/*.
|
||||||
const ignore = ["**/node_modules/**"].concat(args.ignore||[])
|
const ignore = ["**/node_modules/**"].concat(args.ignore||[])
|
||||||
const cwd = process.cwd()
|
const cwd = process.cwd()
|
||||||
|
|
||||||
|
args.require && args.require.forEach(function(module) {
|
||||||
|
module && require(require.resolve(module, { basedir: cwd }))
|
||||||
|
})
|
||||||
|
|
||||||
let pending = globList.length
|
let pending = globList.length
|
||||||
globList.forEach((globPattern) => {
|
globList.forEach((globPattern) => {
|
||||||
glob(globPattern, {ignore})
|
glob(globPattern, {ignore})
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,14 @@
|
||||||
|
|
||||||
|
|
||||||
## Upcoming...
|
## Upcoming...
|
||||||
|
_2018-05-08_
|
||||||
<!-- Add new lines here. Version number will be decided later -->
|
<!-- Add new lines here. Version number will be decided later -->
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
_2018-05-xx_
|
_2018-05-xx_
|
||||||
|
- Added `--require` feature to the ospec executable ([#2144](https://github.com/MithrilJS/mithril.js/pull/2144), [@gilbert](https://github.com/gilbert))
|
||||||
- In Node.js, ospec only uses colors when the output is sent to a terminal ([#2143](https://github.com/MithrilJS/mithril.js/pull/2143))
|
- In Node.js, ospec only uses colors when the output is sent to a terminal ([#2143](https://github.com/MithrilJS/mithril.js/pull/2143))
|
||||||
- the CLI runner now accepts globs as arguments ([#2141](https://github.com/MithrilJS/mithril.js/pull/2141), [@maranomynet](https://github.com/maranomynet))
|
- the CLI runner now accepts globs as arguments ([#2141](https://github.com/MithrilJS/mithril.js/pull/2141), [@maranomynet](https://github.com/maranomynet))
|
||||||
- Added support for custom reporters ([#2020](https://github.com/MithrilJS/mithril.js/pull/2020))
|
- Added support for custom reporters ([#2020](https://github.com/MithrilJS/mithril.js/pull/2020))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue