Skip to content

Commit

Permalink
add clearCache cli command (#4430)
Browse files Browse the repository at this point in the history
* add clearCache cli command

* fix lint issue -  sort-keys

* clear all projects cacheDirectory

- map over all configs

* improve wording in arg description

* use path.join instead of string concat

- rename path arg to directoryPath for less confusion

* remove clearDirectory function in favor of rimraf

* allow clearCache loop to run before failing with exit 1

* add clear_cache integration test

- yarn run jest -- -t 'jest --clearCache'

$ node ./packages/jest-cli/bin/jest.js "-t" "jest --clearCache"
 PASS  integration_tests/__tests__/clear_cache.test.js

Test Suites: 165 skipped, 1 passed, 1 of 166 total
Tests:       1573 skipped, 1 passed, 1574 total
Snapshots:   0 total

* fix integration test

- actually create directory with real test
- check for directory, then delete
- use rimraf.sync
- remove temp var

* changes per PR comments

* update license headers to MIT

* add check for cache_dir before deletion

* update license to MIT for pass_with_no_tests.test.js

* fix lint error
  • Loading branch information
tabrindle authored and cpojer committed Oct 11, 2017
1 parent c15a4a6 commit d82925e
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 3 deletions.
38 changes: 38 additions & 0 deletions integration_tests/__tests__/clear_cache.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
'use strict';

const fs = require('fs');
const os = require('os');
const path = require('path');
const runJest = require('../runJest');

const CACHE = path.resolve(os.tmpdir(), 'clear_cache_directory');

describe('jest --clearCache', () => {
test('normal run results in cache directory being written', () => {
const {status} = runJest('clear_cache', [`--cacheDirectory=${CACHE}`]);

expect(fs.existsSync(CACHE)).toBe(true);
expect(status).toBe(0);
});
test('clearCache results in deleted directory and exit status 0', () => {
expect(fs.existsSync(CACHE)).toBe(true);

const {status, stdout, stderr} = runJest('clear_cache', [
'--clearCache',
`--cacheDirectory=${CACHE}`,
]);

expect(fs.existsSync(CACHE)).toBe(false);
expect(stdout).toBe(`Cleared ${CACHE}\n`);
expect(stderr.trim()).toBe('');
expect(status).toBe(0);
});
});
5 changes: 2 additions & 3 deletions integration_tests/__tests__/pass_with_no_tests.test.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
Expand Down
11 changes: 11 additions & 0 deletions integration_tests/clear_cache/__tests__/clear_cache.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
'use strict';

test('stub', () => expect(1).toBe(1));
5 changes: 5 additions & 0 deletions integration_tests/clear_cache/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"jest": {
"testEnvironment": "node"
}
}
1 change: 1 addition & 0 deletions packages/jest-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"micromatch": "^2.3.11",
"node-notifier": "^5.1.2",
"pify": "^3.0.0",
"rimraf": "^2.5.4",
"slash": "^1.0.0",
"string-length": "^2.0.0",
"strip-ansi": "^4.0.0",
Expand Down
7 changes: 7 additions & 0 deletions packages/jest-cli/src/cli/args.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@ export const options = {
' prevent snapshots from being written unless explicitly requested.',
type: 'boolean',
},
clearCache: {
default: undefined,
description:
'Clears the configured Jest cache directory and then exits. ' +
'Default directory can be found by calling jest --showConfig',
type: 'boolean',
},
clearMocks: {
default: undefined,
description:
Expand Down
10 changes: 10 additions & 0 deletions packages/jest-cli/src/cli/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import Runtime from 'jest-runtime';
import TestWatcher from '../test_watcher';
import watch from '../watch';
import yargs from 'yargs';
import rimraf from 'rimraf';

export async function run(maybeArgv?: Argv, project?: Path) {
const argv: Argv = buildArgv(maybeArgv, project);
Expand Down Expand Up @@ -68,6 +69,15 @@ export const runCLI = async (
outputStream,
);

if (argv.clearCache) {
configs.forEach(config => {
rimraf.sync(config.cacheDirectory);
process.stdout.write(`Cleared ${config.cacheDirectory}\n`);
});

process.exit(0);
}

await _run(
globalConfig,
configs,
Expand Down

0 comments on commit d82925e

Please sign in to comment.