From 1fd3002f1e48b23a0abc48445e859a13cc79dfdd Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 8 Mar 2018 20:29:34 +0100 Subject: [PATCH 01/37] use gitignore in prettylint (#5759) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a56d1f3169e8..4df23fb73463 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "lint": "eslint . --cache --ext js,md", "lint-es5-build": "eslint --no-eslintrc --no-ignore --env=browser packages/*/build-es5", "lint:md": "yarn --silent lint:md:ci --fix", - "lint:md:ci": "prettylint '**/*.md'", + "lint:md:ci": "prettylint '**/*.md' --ignore-path .gitignore", "postinstall": "yarn build", "publish": "yarn build-clean && yarn build && lerna publish --silent", "test-ci-es5-build-in-browser": "karma start --single-run", From b43764b8b7dea6a5855c7b1273a9167cadbff062 Mon Sep 17 00:00:00 2001 From: Evan Brodie Date: Thu, 8 Mar 2018 23:49:44 -0500 Subject: [PATCH 02/37] Fixes ordering of clearMocks in Configuring Jest (#5763) The `clearMocks` section of the _Configuring Jest_ document seems to be out of order. It appears that the sections of this page are meant to be kept in alphabetical order. I noticed the issue because of the autogenerated TOC. I hope this helps :D --- docs/Configuration.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index fba056a83aac..8bd5fb458fc1 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -123,6 +123,14 @@ Jest attempts to scan your dependency tree once (up-front) and cache it in order to ease some of the filesystem raking that needs to happen while running tests. This config option lets you customize where Jest stores that cache data on disk. +### `clearMocks` [boolean] + +Default: `false` + +Automatically clear mock calls and instances between every test. Equivalent to +calling `jest.clearAllMocks()` between each test. This does not remove any mock +implementation that may have been provided. + ### `collectCoverage` [boolean] Default: `false` @@ -494,14 +502,6 @@ _Note: When using multi project runner, it's recommended to add a `displayName` for each project. This will show the `displayName` of a project next to its tests._ -### `clearMocks` [boolean] - -Default: `false` - -Automatically clear mock calls and instances between every test. Equivalent to -calling `jest.clearAllMocks()` between each test. This does not remove any mock -implementation that may have been provided. - ### `reporters` [array] Default: `undefined` From 1969920deac2e9373138b60782a1d6084c754fff Mon Sep 17 00:00:00 2001 From: Colm O'Shea Date: Sat, 10 Mar 2018 14:07:10 +0000 Subject: [PATCH 03/37] Fix impementation typo (#5774) --- docs/MockFunctions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index ae674c1b05cc..074fc4682c5f 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -173,7 +173,7 @@ test('should fetch users', () => { axios.get.mockResolvedValue(resp); // or you could use the following depending on your use case: - // axios.get.mockImpementation(() => Promise.resolve(resp)) + // axios.get.mockImplementation(() => Promise.resolve(resp)) return Users.all().then(users => expect(users).toEqual(resp.data)); }); From be1aee6a884d43257923b7c091970b2da2fa0596 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Sat, 10 Mar 2018 13:25:41 -0500 Subject: [PATCH 04/37] add envinfo to ISSUE_TEMPLATE (#5770) * add envinfo to ISSUE_TEMPLATE * fix lint error in ISSUE_TEMPLATE --- .github/ISSUE_TEMPLATE.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 98bbca702d84..c6b9794584a4 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -21,5 +21,7 @@ repository on GitHub that we can `yarn install` and `yarn test`.** **What is the expected behavior?** -**Please provide your exact Jest configuration and mention your Jest, node, -yarn/npm version and operating system.** +**Please provide your exact Jest configuration** + +**Run `npx envinfo --preset jest` in your project directory and paste the +results here** From 2a6fc70d155df7f7a4863c61b3781f7809da2c9a Mon Sep 17 00:00:00 2001 From: Jeff Lau Date: Sun, 11 Mar 2018 05:16:28 -0400 Subject: [PATCH 05/37] [jest-mock] Track thrown errors in MockFunctionState (#5764) * Fix changelog from previous PR to link to PR. * jest-mock: Track thrown errors in MockFunctionState. Also fix bug where returnValues array was not updated when an error is thrown. * Update CHANGELOG * Improve mock.returnValues API documentation --- CHANGELOG.md | 4 +- docs/MockFunctionAPI.md | 24 +++- .../jest-mock/src/__tests__/jest_mock.test.js | 32 +++++ packages/jest-mock/src/index.js | 128 ++++++++++-------- 4 files changed, 129 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9ff2e28ca13..52f6aad60dce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,9 @@ * `[expect]` Add inverse matchers (`expect.not.arrayContaining`, etc., [#5517](https://github.com/facebook/jest/pull/5517)) * `[jest-mock]` Add tracking of return values in the `mock` property - ([#5738](https://github.com/facebook/jest/issues/5738)) + ([#5752](https://github.com/facebook/jest/pull/5752)) +* `[jest-mock]` Add tracking of thrown errors in the `mock` property + ([5764](https://github.com/facebook/jest/pull/5764)) * `[expect]`Add nthCalledWith spy matcher ([#5605](https://github.com/facebook/jest/pull/5605)) * `[jest-cli]` Add `isSerial` property that runners can expose to specify that diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index bdd383089a18..cef48922b208 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -39,14 +39,30 @@ a `mock.calls` array that looks like this: ### `mockFn.mock.returnValues` An array containing values that have been returned by all calls to this mock +function. For any call to the mock that throws an error, a value of `undefined` +will be stored in `mock.returnValues`. + +For example: A mock function `f` that has been called three times, returning +`result1`, throwing an error, and then returning `result2`, would have a +`mock.returnValues` array that looks like this: + +```js +['result1', undefined, 'result2']; +``` + +### `mockFn.mock.thrownErrors` + +An array containing errors that have been thrown by all calls to this mock function. -For example: A mock function `f` that has been called twice, returning -`result1`, and then returning `result2`, would have a `mock.returnValues` array -that looks like this: +For example: A mock function `f` that has been called twice, throwing an +`Error`, and then executing successfully without an error, would have the +following `mock.thrownErrors` array: ```js -['result1', 'result2']; +f.mock.thrownErrors.length === 2; // true +f.mock.thrownErrors[0] instanceof Error; // true +f.mock.thrownErrors[1] === undefined; // true ``` ### `mockFn.mock.instances` diff --git a/packages/jest-mock/src/__tests__/jest_mock.test.js b/packages/jest-mock/src/__tests__/jest_mock.test.js index f573e5c31f0f..58ca77cf74a4 100644 --- a/packages/jest-mock/src/__tests__/jest_mock.test.js +++ b/packages/jest-mock/src/__tests__/jest_mock.test.js @@ -476,6 +476,38 @@ describe('moduleMocker', () => { }); }); + it(`tracks thrown errors without interfering with other tracking`, () => { + const error = new Error('ODD!'); + const fn = moduleMocker.fn((x, y) => { + // multiply params + const result = x * y; + + if (result % 2 === 1) { + // throw error if result is odd + throw error; + } else { + return result; + } + }); + + expect(fn(2, 4)).toBe(8); + + // Mock still throws the error even though it was internally + // caught and recorded + expect(() => { + fn(3, 5); + }).toThrow('ODD!'); + + expect(fn(6, 3)).toBe(18); + + // All call args tracked + expect(fn.mock.calls).toEqual([[2, 4], [3, 5], [6, 3]]); + // tracked return value is undefined when an error is thrown + expect(fn.mock.returnValues).toEqual([8, undefined, 18]); + // tracked thrown error is undefined when an error is NOT thrown + expect(fn.mock.thrownErrors).toEqual([undefined, error, undefined]); + }); + describe('timestamps', () => { const RealDate = Date; diff --git a/packages/jest-mock/src/index.js b/packages/jest-mock/src/index.js index 10113434233c..e6bed9b123e1 100644 --- a/packages/jest-mock/src/index.js +++ b/packages/jest-mock/src/index.js @@ -25,6 +25,7 @@ type MockFunctionState = { instances: Array, calls: Array>, returnValues: Array, + thrownErrors: Array, timestamps: Array, }; @@ -282,6 +283,7 @@ class ModuleMockerClass { calls: [], instances: [], returnValues: [], + thrownErrors: [], timestamps: [], }; } @@ -319,67 +321,85 @@ class ModuleMockerClass { mockState.calls.push(Array.prototype.slice.call(arguments)); mockState.timestamps.push(Date.now()); - // The bulk of the implementation is wrapped in an immediately executed - // arrow function so the return value of the mock function can - // be easily captured and recorded, despite the many separate return - // points within the logic. - const finalReturnValue = (() => { - if (this instanceof f) { - // This is probably being called as a constructor - prototypeSlots.forEach(slot => { - // Copy prototype methods to the instance to make - // it easier to interact with mock instance call and - // return values - if (prototype[slot].type === 'function') { - const protoImpl = this[slot]; - this[slot] = mocker.generateFromMetadata(prototype[slot]); - this[slot]._protoImpl = protoImpl; - } - }); - - // Run the mock constructor implementation - const mockImpl = mockConfig.specificMockImpls.length - ? mockConfig.specificMockImpls.shift() - : mockConfig.mockImpl; - return mockImpl && mockImpl.apply(this, arguments); - } - - const returnValue = mockConfig.defaultReturnValue; - // If return value is last set, either specific or default, i.e. - // mockReturnValueOnce()/mockReturnValue() is called and no - // mockImplementationOnce()/mockImplementation() is called after that. - // use the set return value. - if (mockConfig.specificReturnValues.length) { - return mockConfig.specificReturnValues.shift(); - } + // Will be set to the return value of the mock if an error is not thrown + let finalReturnValue; + // Will be set to the error that is thrown by the mock (if it throws) + let thrownError; + + try { + // The bulk of the implementation is wrapped in an immediately + // executed arrow function so the return value of the mock function + // can be easily captured and recorded, despite the many separate + // return points within the logic. + finalReturnValue = (() => { + if (this instanceof f) { + // This is probably being called as a constructor + prototypeSlots.forEach(slot => { + // Copy prototype methods to the instance to make + // it easier to interact with mock instance call and + // return values + if (prototype[slot].type === 'function') { + const protoImpl = this[slot]; + this[slot] = mocker.generateFromMetadata(prototype[slot]); + this[slot]._protoImpl = protoImpl; + } + }); + + // Run the mock constructor implementation + const mockImpl = mockConfig.specificMockImpls.length + ? mockConfig.specificMockImpls.shift() + : mockConfig.mockImpl; + return mockImpl && mockImpl.apply(this, arguments); + } - if (mockConfig.isReturnValueLastSet) { - return mockConfig.defaultReturnValue; - } + const returnValue = mockConfig.defaultReturnValue; + // If return value is last set, either specific or default, i.e. + // mockReturnValueOnce()/mockReturnValue() is called and no + // mockImplementationOnce()/mockImplementation() is called after + // that. + // use the set return value. + if (mockConfig.specificReturnValues.length) { + return mockConfig.specificReturnValues.shift(); + } - // If mockImplementationOnce()/mockImplementation() is last set, - // or specific return values are used up, use the mock implementation. - let specificMockImpl; - if (returnValue === undefined) { - specificMockImpl = mockConfig.specificMockImpls.shift(); - if (specificMockImpl === undefined) { - specificMockImpl = mockConfig.mockImpl; + if (mockConfig.isReturnValueLastSet) { + return mockConfig.defaultReturnValue; } - if (specificMockImpl) { - return specificMockImpl.apply(this, arguments); + + // If mockImplementationOnce()/mockImplementation() is last set, + // or specific return values are used up, use the mock + // implementation. + let specificMockImpl; + if (returnValue === undefined) { + specificMockImpl = mockConfig.specificMockImpls.shift(); + if (specificMockImpl === undefined) { + specificMockImpl = mockConfig.mockImpl; + } + if (specificMockImpl) { + return specificMockImpl.apply(this, arguments); + } } - } - // Otherwise use prototype implementation - if (returnValue === undefined && f._protoImpl) { - return f._protoImpl.apply(this, arguments); - } + // Otherwise use prototype implementation + if (returnValue === undefined && f._protoImpl) { + return f._protoImpl.apply(this, arguments); + } - return returnValue; - })(); + return returnValue; + })(); + } catch (error) { + // Store the thrown error so we can record it, then re-throw it. + thrownError = error; + throw error; + } finally { + // Record the return value of the mock function. + // If the mock threw an error, then the value will be undefined. + mockState.returnValues.push(finalReturnValue); + // Record the error thrown by the mock function. + // If no error was thrown, then the value will be udnefiend. + mockState.thrownErrors.push(thrownError); + } - // Record the return value of the mock function before returning it. - mockState.returnValues.push(finalReturnValue); return finalReturnValue; }, metadata.length || 0); From 4034718aa519490b99201dda7d03b01a8f59e617 Mon Sep 17 00:00:00 2001 From: Thomas Lo Date: Sun, 11 Mar 2018 04:17:18 -0500 Subject: [PATCH 06/37] =?UTF-8?q?feat:=20update=20spyOnProperty=20method,?= =?UTF-8?q?=20fixes=20#=E2=80=A6=20(#5753)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: update spyOnProperty method, fixes #5746 * changelog update for spyOnProperty, #5753 --- CHANGELOG.md | 2 + .../jest-mock/src/__tests__/jest_mock.test.js | 107 ++++++++++++++++++ packages/jest-mock/src/index.js | 8 +- 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52f6aad60dce..b9f59f45e805 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ ([#5670](https://github.com/facebook/jest/pull/5670)) * `[expect]` Add inverse matchers (`expect.not.arrayContaining`, etc., [#5517](https://github.com/facebook/jest/pull/5517)) +* `[jest-mock]` Update `spyOnProperty` to support spying on the prototype chain + ([#5753](https://github.com/facebook/jest/pull/5753)) * `[jest-mock]` Add tracking of return values in the `mock` property ([#5752](https://github.com/facebook/jest/pull/5752)) * `[jest-mock]` Add tracking of thrown errors in the `mock` property diff --git a/packages/jest-mock/src/__tests__/jest_mock.test.js b/packages/jest-mock/src/__tests__/jest_mock.test.js index 58ca77cf74a4..7c3f983aa027 100644 --- a/packages/jest-mock/src/__tests__/jest_mock.test.js +++ b/packages/jest-mock/src/__tests__/jest_mock.test.js @@ -900,5 +900,112 @@ describe('moduleMocker', () => { expect(spy1.mock.calls.length).toBe(1); expect(spy2.mock.calls.length).toBe(1); }); + + it('should work with getters on the prototype chain', () => { + let isOriginalCalled = false; + let originalCallThis; + let originalCallArguments; + const prototype = { + get method() { + return function() { + isOriginalCalled = true; + originalCallThis = this; + originalCallArguments = arguments; + }; + }, + }; + const obj = Object.create(prototype, {}); + + const spy = moduleMocker.spyOn(obj, 'method', 'get'); + + const thisArg = {this: true}; + const firstArg = {first: true}; + const secondArg = {second: true}; + obj.method.call(thisArg, firstArg, secondArg); + expect(isOriginalCalled).toBe(true); + expect(originalCallThis).toBe(thisArg); + expect(originalCallArguments.length).toBe(2); + expect(originalCallArguments[0]).toBe(firstArg); + expect(originalCallArguments[1]).toBe(secondArg); + expect(spy).toHaveBeenCalled(); + + isOriginalCalled = false; + originalCallThis = null; + originalCallArguments = null; + spy.mockReset(); + spy.mockRestore(); + obj.method.call(thisArg, firstArg, secondArg); + expect(isOriginalCalled).toBe(true); + expect(originalCallThis).toBe(thisArg); + expect(originalCallArguments.length).toBe(2); + expect(originalCallArguments[0]).toBe(firstArg); + expect(originalCallArguments[1]).toBe(secondArg); + expect(spy).not.toHaveBeenCalled(); + }); + + test('should work with setters on the prototype chain', () => { + const prototype = { + _property: false, + set property(value) { + this._property = value; + }, + get property() { + return this._property; + }, + }; + const obj = Object.create(prototype, {}); + + const spy = moduleMocker.spyOn(obj, 'property', 'set'); + obj.property = true; + expect(spy).toHaveBeenCalled(); + expect(obj.property).toBe(true); + obj.property = false; + spy.mockReset(); + spy.mockRestore(); + obj.property = true; + expect(spy).not.toHaveBeenCalled(); + expect(obj.property).toBe(true); + }); + + it('supports restoring all spies on the prototype chain', () => { + let methodOneCalls = 0; + let methodTwoCalls = 0; + const prototype = { + get methodOne() { + return function() { + methodOneCalls++; + }; + }, + get methodTwo() { + return function() { + methodTwoCalls++; + }; + }, + }; + const obj = Object.create(prototype, {}); + + const spy1 = moduleMocker.spyOn(obj, 'methodOne', 'get'); + const spy2 = moduleMocker.spyOn(obj, 'methodTwo', 'get'); + + // First, we call with the spies: both spies and both original functions + // should be called. + obj.methodOne(); + obj.methodTwo(); + expect(methodOneCalls).toBe(1); + expect(methodTwoCalls).toBe(1); + expect(spy1.mock.calls.length).toBe(1); + expect(spy2.mock.calls.length).toBe(1); + + moduleMocker.restoreAllMocks(); + + // Then, after resetting all mocks, we call methods again. Only the real + // methods should bump their count, not the spies. + obj.methodOne(); + obj.methodTwo(); + expect(methodOneCalls).toBe(2); + expect(methodTwoCalls).toBe(2); + expect(spy1.mock.calls.length).toBe(1); + expect(spy2.mock.calls.length).toBe(1); + }); }); }); diff --git a/packages/jest-mock/src/index.js b/packages/jest-mock/src/index.js index e6bed9b123e1..ff02d3a5ff38 100644 --- a/packages/jest-mock/src/index.js +++ b/packages/jest-mock/src/index.js @@ -757,7 +757,13 @@ class ModuleMockerClass { throw new Error('No property name supplied'); } - const descriptor = Object.getOwnPropertyDescriptor(obj, propertyName); + let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName); + let proto = Object.getPrototypeOf(obj); + + while (!descriptor && proto !== null) { + descriptor = Object.getOwnPropertyDescriptor(proto, propertyName); + proto = Object.getPrototypeOf(proto); + } if (!descriptor) { throw new Error(propertyName + ' property does not exist'); From 620bdcae4a53f7f016ff89000424ae0749c1d1eb Mon Sep 17 00:00:00 2001 From: Karl Horky Date: Mon, 12 Mar 2018 16:44:19 +0100 Subject: [PATCH 07/37] Fix config filename (#5782) --- .../__tests__/__snapshots__/jest.config.js.test.js.snap | 4 ++-- integration-tests/__tests__/jest.config.js.test.js | 2 +- integration-tests/__tests__/version.test.js | 2 +- packages/jest-config/src/index.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/integration-tests/__tests__/__snapshots__/jest.config.js.test.js.snap b/integration-tests/__tests__/__snapshots__/jest.config.js.test.js.snap index 70ecdfd1763f..3c15495f9bc9 100644 --- a/integration-tests/__tests__/__snapshots__/jest.config.js.test.js.snap +++ b/integration-tests/__tests__/__snapshots__/jest.config.js.test.js.snap @@ -24,14 +24,14 @@ Ran all test suites. " `; -exports[`works with jest.conf.js 1`] = ` +exports[`works with jest.config.js 1`] = ` "PASS __tests__/a-banana.js ✓ banana " `; -exports[`works with jest.conf.js 2`] = ` +exports[`works with jest.config.js 2`] = ` "Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total diff --git a/integration-tests/__tests__/jest.config.js.test.js b/integration-tests/__tests__/jest.config.js.test.js index 78cf65e97557..d4da0512252c 100644 --- a/integration-tests/__tests__/jest.config.js.test.js +++ b/integration-tests/__tests__/jest.config.js.test.js @@ -21,7 +21,7 @@ SkipOnWindows.suite(); beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); -test('works with jest.conf.js', () => { +test('works with jest.config.js', () => { writeFiles(DIR, { '__tests__/a-banana.js': `test('banana', () => expect(1).toBe(1));`, 'jest.config.js': `module.exports = {testRegex: '.*-banana.js'};`, diff --git a/integration-tests/__tests__/version.test.js b/integration-tests/__tests__/version.test.js index 1a34fbddfbd9..1836a153cc3a 100644 --- a/integration-tests/__tests__/version.test.js +++ b/integration-tests/__tests__/version.test.js @@ -22,7 +22,7 @@ SkipOnWindows.suite(); beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); -test('works with jest.conf.js', () => { +test('works with jest.config.js', () => { writeFiles(DIR, { '.watchmanconfig': '', 'package.json': '{}', diff --git a/packages/jest-config/src/index.js b/packages/jest-config/src/index.js index bd466e93a255..62b469cc580c 100644 --- a/packages/jest-config/src/index.js +++ b/packages/jest-config/src/index.js @@ -68,7 +68,7 @@ export function readConfig( config.rootDir = config.rootDir || packageRootOrConfig; rawOptions = config; // A string passed to `--config`, which is either a direct path to the config - // or a path to directory containing `package.json` or `jest.conf.js` + // or a path to directory containing `package.json` or `jest.config.js` } else if (!skipArgvConfigOption && typeof argv.config == 'string') { configPath = resolveConfigPath(argv.config, process.cwd()); rawOptions = readConfigFileAndSetRootDir(configPath); From 9cb1a5c568af567af053d6a9c4be853d480328a8 Mon Sep 17 00:00:00 2001 From: Aymeric Bouzy Date: Mon, 12 Mar 2018 22:17:32 +0100 Subject: [PATCH 08/37] Changelog and documentation for PR #5503 (Custom asymmetric matchers) (#5784) * test * define asymmetric matchers * more * correction * trying to fix flow * flow fix * Changelog * add example in documentation --- CHANGELOG.md | 2 ++ docs/ExpectAPI.md | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9f59f45e805..a5fe04d618ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ ([#5670](https://github.com/facebook/jest/pull/5670)) * `[expect]` Add inverse matchers (`expect.not.arrayContaining`, etc., [#5517](https://github.com/facebook/jest/pull/5517)) +* `[expect]` `expect.extend` now also extends asymmetric matchers + ([#5503](https://github.com/facebook/jest/pull/5503)) * `[jest-mock]` Update `spyOnProperty` to support spying on the prototype chain ([#5753](https://github.com/facebook/jest/pull/5753)) * `[jest-mock]` Add tracking of return values in the `mock` property diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 784575aaab3e..2549488517bd 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -68,6 +68,10 @@ expect.extend({ test('even and odd numbers', () => { expect(100).toBeDivisibleBy(2); expect(101).not.toBeDivisibleBy(2); + expect({apples: 6, bananas: 3}).toEqual({ + apples: expect.toBeDivisibleBy(2), + bananas: expect.not.toBeDivisibleBy(2), + }); }); ``` From fd7a967b8afb3d1fd8241dbd8d447d33d22d03a6 Mon Sep 17 00:00:00 2001 From: Laura Date: Wed, 14 Mar 2018 01:53:50 -0700 Subject: [PATCH 09/37] Update README.md (#5777) added MIT License icon :) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c17c42750954..b9ceddd196be 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ [![Travis Build Status](https://travis-ci.org/facebook/jest.svg?branch=master)](https://travis-ci.org/facebook/jest) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8n38o44k585hhvhd/branch/master?svg=true)](https://ci.appveyor.com/project/Daniel15/jest/branch/master) [![npm version](https://badge.fury.io/js/jest.svg)](http://badge.fury.io/js/jest) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + 🃏 Delightful JavaScript Testing From f588a6000fba8ea796bb66c76c979ccda353f0f8 Mon Sep 17 00:00:00 2001 From: cpojer Date: Wed, 14 Mar 2018 08:55:49 +0000 Subject: [PATCH 10/37] Fix README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b9ceddd196be..2aa76f06997a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ [![npm version](https://badge.fury.io/js/jest.svg)](http://badge.fury.io/js/jest) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - 🃏 Delightful JavaScript Testing * **👩🏻‍💻 Easy Setup**: Complete and easy to set-up JavaScript testing solution. From f1922ad8bb18d8a4ff20cb90abf89e9e4cff52c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jim=C3=A9nez=20Es=C3=BAn?= Date: Wed, 14 Mar 2018 15:16:16 +0000 Subject: [PATCH 11/37] Improve jest-worker (up to 4x) (#5793) * Allow arbitrary method and iterations in jest-worker performance test * Convert worker queue from an array to linked list * Update worker.js --- .../src/__performance_tests__/test.js | 19 +++++--- .../workers/jest_worker.js | 4 ++ .../workers/worker_farm.js | 5 +++ packages/jest-worker/src/types.js | 1 + packages/jest-worker/src/worker.js | 45 ++++++++++++------- 5 files changed, 52 insertions(+), 22 deletions(-) diff --git a/packages/jest-worker/src/__performance_tests__/test.js b/packages/jest-worker/src/__performance_tests__/test.js index aeff514657af..5db9938889eb 100644 --- a/packages/jest-worker/src/__performance_tests__/test.js +++ b/packages/jest-worker/src/__performance_tests__/test.js @@ -2,10 +2,17 @@ // eslint-disable-next-line import/no-extraneous-dependencies const workerFarm = require('worker-farm'); -import JestWorker from '../../build'; +const assert = require('assert'); +const JestWorker = require('../../build').default; + +// Typical tests: node --expose-gc test.js empty 100000 +// node --expose-gc test.js loadTest 10000 +assert(process.argv[2], 'Pass a child method name'); +assert(process.argv[3], 'Pass the number of iteratitons'); const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); -const calls = 10000; +const method = process.argv[2]; +const calls = +process.argv[3]; const threads = 6; function testWorkerFarm() { @@ -35,7 +42,7 @@ function testWorkerFarm() { maxConcurrentWorkers: threads, }, require.resolve('./workers/worker_farm'), - ['loadTest'], + [method], ); // Let all workers come up. @@ -45,7 +52,7 @@ function testWorkerFarm() { for (let i = 0; i < calls; i++) { const promisified = new Promise((resolve, reject) => { - api.loadTest((err, result) => { + api[method]((err, result) => { if (err) { reject(err); } else { @@ -80,7 +87,7 @@ function testJestWorker() { } const farm = new JestWorker(require.resolve('./workers/jest_worker'), { - exposedMethods: ['loadTest'], + exposedMethods: [method], forkOptions: {execArgv: []}, workers: threads, }); @@ -94,7 +101,7 @@ function testJestWorker() { const startProcess = Date.now(); for (let i = 0; i < calls; i++) { - const promisified = farm.loadTest(); + const promisified = farm[method](); promisified.then(countToFinish); } diff --git a/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js b/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js index e48d8527c4f8..5468ec07aa65 100644 --- a/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js +++ b/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js @@ -5,3 +5,7 @@ const pi = require('./pi'); module.exports.loadTest = function() { return pi(); }; + +module.exports.empty = function() { + // Do nothing. +}; diff --git a/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js b/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js index 4213db2463b4..360042c808b0 100644 --- a/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js +++ b/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js @@ -5,3 +5,8 @@ const pi = require('./pi'); module.exports.loadTest = function(callback) { callback(null, pi()); }; + +module.exports.empty = function(callback) { + // Do nothing. + callback(); +}; diff --git a/packages/jest-worker/src/types.js b/packages/jest-worker/src/types.js index c40ed0e50e33..cd61fa2d3dc2 100644 --- a/packages/jest-worker/src/types.js +++ b/packages/jest-worker/src/types.js @@ -99,4 +99,5 @@ export type QueueCallback = (?Error, ?any) => void; export type QueueChildMessage = {| request: ChildMessage, callback: QueueCallback, + next: ?QueueChildMessage, |}; diff --git a/packages/jest-worker/src/worker.js b/packages/jest-worker/src/worker.js index e087ea05adec..80562376828b 100644 --- a/packages/jest-worker/src/worker.js +++ b/packages/jest-worker/src/worker.js @@ -48,13 +48,14 @@ import type { export default class { _busy: boolean; _child: ChildProcess; + _last: ?QueueChildMessage; _options: WorkerOptions; - _queue: Array; + _queue: ?QueueChildMessage; _retries: number; constructor(options: WorkerOptions) { this._options = options; - this._queue = []; + this._queue = null; this._initialize(); } @@ -68,7 +69,15 @@ export default class { } send(request: ChildMessage, callback: QueueCallback) { - this._queue.push({callback, request}); + const item = {callback, next: null, request}; + + if (this._last) { + this._last.next = item; + } else { + this._queue = item; + } + + this._last = item; this._process(); } @@ -82,7 +91,7 @@ export default class { env: Object.assign({}, process.env, { JEST_WORKER_ID: this._options.workerId, }), - // suppress --debug / --inspect flags while preserving others (like --harmony) + // Suppress --debug / --inspect flags while preserving others (like --harmony). execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), silent: true, }, @@ -121,35 +130,39 @@ export default class { return; } - const queue = this._queue; - let skip = 0; + let item = this._queue; // Calls in the queue might have already been processed by another worker, // so we have to skip them. - while (queue.length > skip && queue[skip].request[1]) { - skip++; + while (item && item.request[1]) { + item = item.next; } - // Remove all pieces at once. - queue.splice(0, skip); - - if (queue.length) { - const call = queue[0]; + this._queue = item; + if (item) { // Flag the call as processed, so that other workers know that they don't // have to process it as well. - call.request[1] = true; + item.request[1] = true; this._retries = 0; this._busy = true; // $FlowFixMe: wrong "ChildProcess.send" signature. - this._child.send(call.request); + this._child.send(item.request); + } else { + this._last = item; } } _receive(response: any /* Should be ParentMessage */) { - const callback = this._queue[0].callback; + const item = this._queue; + + if (!item) { + throw new TypeError('Unexpected response with an empty queue'); + } + + const callback = item.callback; this._busy = false; this._process(); From feeb371f0b925f3eb7b9ce7e871720c20cd923dd Mon Sep 17 00:00:00 2001 From: robz Date: Wed, 14 Mar 2018 14:38:39 -0700 Subject: [PATCH 12/37] Fix typo in MockFunctions.md (#5795) Impementation -> Implementation --- website/versioned_docs/version-22.4/MockFunctions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/versioned_docs/version-22.4/MockFunctions.md b/website/versioned_docs/version-22.4/MockFunctions.md index f6b7b5629d63..8579362ff5b8 100644 --- a/website/versioned_docs/version-22.4/MockFunctions.md +++ b/website/versioned_docs/version-22.4/MockFunctions.md @@ -167,7 +167,7 @@ test('should fetch users', () => { axios.get.mockResolvedValue(resp); // or you could use the follwing depending on your use case: - // axios.get.mockImpementation(() => Promise.resolve(resp)) + // axios.get.mockImplementation(() => Promise.resolve(resp)) return Users.all().then(users => expect(users).toEqual(resp.data)); }); From 9599d5cce25c24cbbec1aa25152f5e91fd60ba2b Mon Sep 17 00:00:00 2001 From: Justin Collum Date: Thu, 15 Mar 2018 00:21:04 -0700 Subject: [PATCH 13/37] Update Troubleshooting.md (#5794) * Update Troubleshooting.md I was trying to get jest debugging working and ran into issues. Switched to Node 9.7.1 and the issue went away, breakpoints were hit. Related: https://github.com/nodejs/node/issues/7593 * Update Troubleshooting.md --- docs/Troubleshooting.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index e2de98603998..2e6b5eb8ff5b 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -7,7 +7,8 @@ Uh oh, something went wrong? Use this guide to resolve issues with Jest. ### Tests are Failing and You Don't Know Why -Try using the debugging support built into Node. +Try using the debugging support built into Node. Note: This will only work in +Node.js 8+. Place a `debugger;` statement in any of your tests, and then, in your project's directory, run: From df34b204c3aa8dfc3a05d19039c6d538cbce9135 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Esun Date: Thu, 15 Mar 2018 14:58:49 +0000 Subject: [PATCH 14/37] Release v23.0.0-alpha.0 --- lerna.json | 2 +- packages/babel-jest/package.json | 4 ++-- packages/babel-plugin-jest-hoist/package.json | 2 +- packages/babel-preset-jest/package.json | 4 ++-- packages/expect/package.json | 6 ++--- packages/jest-circus/package.json | 12 +++++----- packages/jest-cli/package.json | 22 +++++++++---------- packages/jest-config/package.json | 14 ++++++------ packages/jest-editor-support/package.json | 4 ++-- packages/jest-environment-jsdom/package.json | 6 ++--- packages/jest-environment-node/package.json | 6 ++--- packages/jest-haste-map/package.json | 4 ++-- packages/jest-jasmine2/package.json | 14 ++++++------ packages/jest-matcher-utils/package.json | 2 +- packages/jest-message-util/package.json | 2 +- packages/jest-mock/package.json | 2 +- packages/jest-repl/package.json | 6 ++--- packages/jest-resolve/package.json | 4 ++-- packages/jest-runner/package.json | 16 +++++++------- packages/jest-runtime/package.json | 18 +++++++-------- packages/jest-snapshot/package.json | 4 ++-- .../jest-test-typescript-parser/package.json | 4 ++-- packages/jest-util/package.json | 6 ++--- packages/jest-validate/package.json | 4 ++-- packages/jest-worker/package.json | 2 +- packages/jest/package.json | 4 ++-- 26 files changed, 87 insertions(+), 87 deletions(-) diff --git a/lerna.json b/lerna.json index bdc1955e2078..8686b94d9b56 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.9.0", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index 20611e94fde6..559e9e5a8bc2 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -1,7 +1,7 @@ { "name": "babel-jest", "description": "Jest plugin to use babel for transformation.", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "main": "build/index.js", "dependencies": { "babel-plugin-istanbul": "^4.1.5", - "babel-preset-jest": "^22.4.1" + "babel-preset-jest": "^23.0.0-alpha.0" }, "devDependencies": { "babel-core": "^6.0.0" diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json index b06ccf7d947b..71875b0afcc9 100644 --- a/packages/babel-plugin-jest-hoist/package.json +++ b/packages/babel-plugin-jest-hoist/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-jest-hoist", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/babel-preset-jest/package.json b/packages/babel-preset-jest/package.json index 1a3bab0b6cab..3b2212c5f1dd 100644 --- a/packages/babel-preset-jest/package.json +++ b/packages/babel-preset-jest/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-jest", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "index.js", "dependencies": { - "babel-plugin-jest-hoist": "^22.4.1", + "babel-plugin-jest-hoist": "^23.0.0-alpha.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0" } } diff --git a/packages/expect/package.json b/packages/expect/package.json index 4795bec16e9d..fececf3f5212 100644 --- a/packages/expect/package.json +++ b/packages/expect/package.json @@ -1,6 +1,6 @@ { "name": "expect", - "version": "22.4.0", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,8 +12,8 @@ "ansi-styles": "^3.2.0", "jest-diff": "^22.4.0", "jest-get-type": "^22.1.0", - "jest-matcher-utils": "^22.4.0", - "jest-message-util": "^22.4.0", + "jest-matcher-utils": "^23.0.0-alpha.0", + "jest-message-util": "^23.0.0-alpha.0", "jest-regex-util": "^22.1.0" } } diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index d1075daa6efb..f8895dc15a93 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -1,6 +1,6 @@ { "name": "jest-circus", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,13 +9,13 @@ "main": "build/index.js", "dependencies": { "chalk": "^2.0.1", - "expect": "^22.4.0", + "expect": "^23.0.0-alpha.0", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^22.4.0", - "jest-message-util": "^22.4.0", - "jest-snapshot": "^22.4.0" + "jest-matcher-utils": "^23.0.0-alpha.0", + "jest-message-util": "^23.0.0-alpha.0", + "jest-snapshot": "^23.0.0-alpha.0" }, "devDependencies": { - "jest-runtime": "^22.4.2" + "jest-runtime": "^23.0.0-alpha.0" } } diff --git a/packages/jest-cli/package.json b/packages/jest-cli/package.json index 07de853f620a..b4819ea03b9e 100644 --- a/packages/jest-cli/package.json +++ b/packages/jest-cli/package.json @@ -1,7 +1,7 @@ { "name": "jest-cli", "description": "Delightful JavaScript Testing.", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "main": "build/jest.js", "dependencies": { "ansi-escapes": "^3.0.0", @@ -16,19 +16,19 @@ "istanbul-lib-instrument": "^1.8.0", "istanbul-lib-source-maps": "^1.2.1", "jest-changed-files": "^22.2.0", - "jest-config": "^22.4.2", - "jest-environment-jsdom": "^22.4.1", + "jest-config": "^23.0.0-alpha.0", + "jest-environment-jsdom": "^23.0.0-alpha.0", "jest-get-type": "^22.1.0", - "jest-haste-map": "^22.4.2", - "jest-message-util": "^22.4.0", + "jest-haste-map": "^23.0.0-alpha.0", + "jest-message-util": "^23.0.0-alpha.0", "jest-regex-util": "^22.1.0", "jest-resolve-dependencies": "^22.1.0", - "jest-runner": "^22.4.2", - "jest-runtime": "^22.4.2", - "jest-snapshot": "^22.4.0", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.2", - "jest-worker": "^22.2.2", + "jest-runner": "^23.0.0-alpha.0", + "jest-runtime": "^23.0.0-alpha.0", + "jest-snapshot": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", + "jest-validate": "^23.0.0-alpha.0", + "jest-worker": "^23.0.0-alpha.0", "micromatch": "^2.3.11", "node-notifier": "^5.2.1", "realpath-native": "^1.0.0", diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index bce96faa1336..91162a9b5f25 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -1,6 +1,6 @@ { "name": "jest-config", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,14 +10,14 @@ "dependencies": { "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^22.4.1", - "jest-environment-node": "^22.4.1", + "jest-environment-jsdom": "^23.0.0-alpha.0", + "jest-environment-node": "^23.0.0-alpha.0", "jest-get-type": "^22.1.0", - "jest-jasmine2": "^22.4.2", + "jest-jasmine2": "^23.0.0-alpha.0", "jest-regex-util": "^22.1.0", - "jest-resolve": "^22.4.2", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.2", + "jest-resolve": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", + "jest-validate": "^23.0.0-alpha.0", "pretty-format": "^22.4.0" } } diff --git a/packages/jest-editor-support/package.json b/packages/jest-editor-support/package.json index 6ffa39f5aa34..7396c9adffde 100644 --- a/packages/jest-editor-support/package.json +++ b/packages/jest-editor-support/package.json @@ -1,6 +1,6 @@ { "name": "jest-editor-support", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "dependencies": { "babel-traverse": "^6.14.1", "babylon": "^6.14.1", - "jest-snapshot": "^22.4.0" + "jest-snapshot": "^23.0.0-alpha.0" }, "typings": "index.d.ts" } diff --git a/packages/jest-environment-jsdom/package.json b/packages/jest-environment-jsdom/package.json index e848a4a388ca..f7df54c44121 100644 --- a/packages/jest-environment-jsdom/package.json +++ b/packages/jest-environment-jsdom/package.json @@ -1,6 +1,6 @@ { "name": "jest-environment-jsdom", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,8 +8,8 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-mock": "^22.2.0", - "jest-util": "^22.4.1", + "jest-mock": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", "jsdom": "^11.5.1" } } diff --git a/packages/jest-environment-node/package.json b/packages/jest-environment-node/package.json index 3bd2d268e4c1..9ab93c26e7fd 100644 --- a/packages/jest-environment-node/package.json +++ b/packages/jest-environment-node/package.json @@ -1,6 +1,6 @@ { "name": "jest-environment-node", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-mock": "^22.2.0", - "jest-util": "^22.4.1" + "jest-mock": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0" } } diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index d6f5924c601a..739d40a39640 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -1,6 +1,6 @@ { "name": "jest-haste-map", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,7 +12,7 @@ "graceful-fs": "^4.1.11", "jest-docblock": "^22.4.0", "jest-serializer": "^22.4.0", - "jest-worker": "^22.2.2", + "jest-worker": "^23.0.0-alpha.0", "micromatch": "^2.3.11", "sane": "^2.0.0" } diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index 4e260e5f98dc..538b9e680286 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -1,6 +1,6 @@ { "name": "jest-jasmine2", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,17 +10,17 @@ "dependencies": { "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^22.4.0", + "expect": "^23.0.0-alpha.0", "graceful-fs": "^4.1.11", "is-generator-fn": "^1.0.0", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^22.4.0", - "jest-message-util": "^22.4.0", - "jest-snapshot": "^22.4.0", - "jest-util": "^22.4.1", + "jest-matcher-utils": "^23.0.0-alpha.0", + "jest-message-util": "^23.0.0-alpha.0", + "jest-snapshot": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", "source-map-support": "^0.5.0" }, "devDependencies": { - "jest-runtime": "^22.4.2" + "jest-runtime": "^23.0.0-alpha.0" } } diff --git a/packages/jest-matcher-utils/package.json b/packages/jest-matcher-utils/package.json index 3b2fd408ea8b..4742e40f9ee2 100644 --- a/packages/jest-matcher-utils/package.json +++ b/packages/jest-matcher-utils/package.json @@ -1,7 +1,7 @@ { "name": "jest-matcher-utils", "description": "A set of utility functions for expect and related packages", - "version": "22.4.0", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index e4a9226264ff..d09473737ff6 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -1,6 +1,6 @@ { "name": "jest-message-util", - "version": "22.4.0", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-mock/package.json b/packages/jest-mock/package.json index a78fad3f89c4..9018dfe2b45c 100644 --- a/packages/jest-mock/package.json +++ b/packages/jest-mock/package.json @@ -1,6 +1,6 @@ { "name": "jest-mock", - "version": "22.2.0", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-repl/package.json b/packages/jest-repl/package.json index 11384aa07afa..985b3924b3fa 100644 --- a/packages/jest-repl/package.json +++ b/packages/jest-repl/package.json @@ -1,6 +1,6 @@ { "name": "jest-repl", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,8 +8,8 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-runtime": "^22.4.2", - "jest-validate": "^22.4.2", + "jest-runtime": "^23.0.0-alpha.0", + "jest-validate": "^23.0.0-alpha.0", "repl": "^0.1.3", "yargs": "^11.0.0" }, diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index c6259e8b9cd7..66788533cc49 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -1,6 +1,6 @@ { "name": "jest-resolve", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -13,6 +13,6 @@ "realpath-native": "^1.0.0" }, "devDependencies": { - "jest-haste-map": "^22.4.2" + "jest-haste-map": "^23.0.0-alpha.0" } } diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index a086ba78223f..3f7b1c0db038 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -1,6 +1,6 @@ { "name": "jest-runner", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,15 +9,15 @@ "main": "build/index.js", "dependencies": { "exit": "^0.1.2", - "jest-config": "^22.4.2", + "jest-config": "^23.0.0-alpha.0", "jest-docblock": "^22.4.0", - "jest-haste-map": "^22.4.2", - "jest-jasmine2": "^22.4.2", + "jest-haste-map": "^23.0.0-alpha.0", + "jest-jasmine2": "^23.0.0-alpha.0", "jest-leak-detector": "^22.4.0", - "jest-message-util": "^22.4.0", - "jest-runtime": "^22.4.2", - "jest-util": "^22.4.1", - "jest-worker": "^22.2.2", + "jest-message-util": "^23.0.0-alpha.0", + "jest-runtime": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", + "jest-worker": "^23.0.0-alpha.0", "throat": "^4.0.0" } } diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 2be9b584d4aa..4839d52ace26 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -1,6 +1,6 @@ { "name": "jest-runtime", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,18 +9,18 @@ "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", - "babel-jest": "^22.4.1", + "babel-jest": "^23.0.0-alpha.0", "babel-plugin-istanbul": "^4.1.5", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "exit": "^0.1.2", "graceful-fs": "^4.1.11", - "jest-config": "^22.4.2", - "jest-haste-map": "^22.4.2", + "jest-config": "^23.0.0-alpha.0", + "jest-haste-map": "^23.0.0-alpha.0", "jest-regex-util": "^22.1.0", - "jest-resolve": "^22.4.2", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.2", + "jest-resolve": "^23.0.0-alpha.0", + "jest-util": "^23.0.0-alpha.0", + "jest-validate": "^23.0.0-alpha.0", "json-stable-stringify": "^1.0.1", "micromatch": "^2.3.11", "realpath-native": "^1.0.0", @@ -30,8 +30,8 @@ "yargs": "^11.0.0" }, "devDependencies": { - "jest-environment-jsdom": "^22.4.1", - "jest-environment-node": "^22.4.1" + "jest-environment-jsdom": "^23.0.0-alpha.0", + "jest-environment-node": "^23.0.0-alpha.0" }, "bin": { "jest-runtime": "./bin/jest-runtime.js" diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 36020d49e835..a14144e36c88 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -1,6 +1,6 @@ { "name": "jest-snapshot", - "version": "22.4.0", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "dependencies": { "chalk": "^2.0.1", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^22.4.0", + "jest-matcher-utils": "^23.0.0-alpha.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "pretty-format": "^22.4.0" diff --git a/packages/jest-test-typescript-parser/package.json b/packages/jest-test-typescript-parser/package.json index 96e3aa49583f..fe758d6c2701 100644 --- a/packages/jest-test-typescript-parser/package.json +++ b/packages/jest-test-typescript-parser/package.json @@ -1,6 +1,6 @@ { "name": "jest-test-typescript-parser", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-editor-support": "^22.4.1", + "jest-editor-support": "^23.0.0-alpha.0", "typescript": "^2.5.3" } } diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index 1b42a21620f2..eae8a8269eb7 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -1,6 +1,6 @@ { "name": "jest-util", - "version": "22.4.1", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,11 +12,11 @@ "chalk": "^2.0.1", "graceful-fs": "^4.1.11", "is-ci": "^1.0.10", - "jest-message-util": "^22.4.0", + "jest-message-util": "^23.0.0-alpha.0", "mkdirp": "^0.5.1", "source-map": "^0.6.0" }, "devDependencies": { - "jest-mock": "^22.2.0" + "jest-mock": "^23.0.0-alpha.0" } } diff --git a/packages/jest-validate/package.json b/packages/jest-validate/package.json index 6aba0cc0dd73..03f9c2e54a94 100644 --- a/packages/jest-validate/package.json +++ b/packages/jest-validate/package.json @@ -1,6 +1,6 @@ { "name": "jest-validate", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,7 +9,7 @@ "main": "build/index.js", "dependencies": { "chalk": "^2.0.1", - "jest-config": "^22.4.2", + "jest-config": "^23.0.0-alpha.0", "jest-get-type": "^22.1.0", "leven": "^2.1.0", "pretty-format": "^22.4.0" diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index 6d741c362541..1844802b4259 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -1,6 +1,6 @@ { "name": "jest-worker", - "version": "22.2.2", + "version": "23.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest/package.json b/packages/jest/package.json index e057995563d9..fba080817b63 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -1,11 +1,11 @@ { "name": "jest", "description": "Delightful JavaScript Testing.", - "version": "22.4.2", + "version": "23.0.0-alpha.0", "main": "build/jest.js", "dependencies": { "import-local": "^1.0.0", - "jest-cli": "^22.4.2" + "jest-cli": "^23.0.0-alpha.0" }, "bin": { "jest": "./bin/jest.js" From 84b17fb59c1d9fd7f964b5f2bfd9d7e2b898f89a Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 16 Mar 2018 15:13:02 +0100 Subject: [PATCH 15/37] Revert "Release v23.0.0-alpha.0" (#5810) This reverts commit df34b204c3aa8dfc3a05d19039c6d538cbce9135. --- lerna.json | 2 +- packages/babel-jest/package.json | 4 ++-- packages/babel-plugin-jest-hoist/package.json | 2 +- packages/babel-preset-jest/package.json | 4 ++-- packages/expect/package.json | 6 ++--- packages/jest-circus/package.json | 12 +++++----- packages/jest-cli/package.json | 22 +++++++++---------- packages/jest-config/package.json | 14 ++++++------ packages/jest-editor-support/package.json | 4 ++-- packages/jest-environment-jsdom/package.json | 6 ++--- packages/jest-environment-node/package.json | 6 ++--- packages/jest-haste-map/package.json | 4 ++-- packages/jest-jasmine2/package.json | 14 ++++++------ packages/jest-matcher-utils/package.json | 2 +- packages/jest-message-util/package.json | 2 +- packages/jest-mock/package.json | 2 +- packages/jest-repl/package.json | 6 ++--- packages/jest-resolve/package.json | 4 ++-- packages/jest-runner/package.json | 16 +++++++------- packages/jest-runtime/package.json | 18 +++++++-------- packages/jest-snapshot/package.json | 4 ++-- .../jest-test-typescript-parser/package.json | 4 ++-- packages/jest-util/package.json | 6 ++--- packages/jest-validate/package.json | 4 ++-- packages/jest-worker/package.json | 2 +- packages/jest/package.json | 4 ++-- 26 files changed, 87 insertions(+), 87 deletions(-) diff --git a/lerna.json b/lerna.json index 8686b94d9b56..bdc1955e2078 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.9.0", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index 559e9e5a8bc2..20611e94fde6 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -1,7 +1,7 @@ { "name": "babel-jest", "description": "Jest plugin to use babel for transformation.", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "main": "build/index.js", "dependencies": { "babel-plugin-istanbul": "^4.1.5", - "babel-preset-jest": "^23.0.0-alpha.0" + "babel-preset-jest": "^22.4.1" }, "devDependencies": { "babel-core": "^6.0.0" diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json index 71875b0afcc9..b06ccf7d947b 100644 --- a/packages/babel-plugin-jest-hoist/package.json +++ b/packages/babel-plugin-jest-hoist/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-jest-hoist", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/babel-preset-jest/package.json b/packages/babel-preset-jest/package.json index 3b2212c5f1dd..1a3bab0b6cab 100644 --- a/packages/babel-preset-jest/package.json +++ b/packages/babel-preset-jest/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-jest", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "index.js", "dependencies": { - "babel-plugin-jest-hoist": "^23.0.0-alpha.0", + "babel-plugin-jest-hoist": "^22.4.1", "babel-plugin-syntax-object-rest-spread": "^6.13.0" } } diff --git a/packages/expect/package.json b/packages/expect/package.json index fececf3f5212..4795bec16e9d 100644 --- a/packages/expect/package.json +++ b/packages/expect/package.json @@ -1,6 +1,6 @@ { "name": "expect", - "version": "23.0.0-alpha.0", + "version": "22.4.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,8 +12,8 @@ "ansi-styles": "^3.2.0", "jest-diff": "^22.4.0", "jest-get-type": "^22.1.0", - "jest-matcher-utils": "^23.0.0-alpha.0", - "jest-message-util": "^23.0.0-alpha.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", "jest-regex-util": "^22.1.0" } } diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index f8895dc15a93..d1075daa6efb 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -1,6 +1,6 @@ { "name": "jest-circus", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,13 +9,13 @@ "main": "build/index.js", "dependencies": { "chalk": "^2.0.1", - "expect": "^23.0.0-alpha.0", + "expect": "^22.4.0", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^23.0.0-alpha.0", - "jest-message-util": "^23.0.0-alpha.0", - "jest-snapshot": "^23.0.0-alpha.0" + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0" }, "devDependencies": { - "jest-runtime": "^23.0.0-alpha.0" + "jest-runtime": "^22.4.2" } } diff --git a/packages/jest-cli/package.json b/packages/jest-cli/package.json index b4819ea03b9e..07de853f620a 100644 --- a/packages/jest-cli/package.json +++ b/packages/jest-cli/package.json @@ -1,7 +1,7 @@ { "name": "jest-cli", "description": "Delightful JavaScript Testing.", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "main": "build/jest.js", "dependencies": { "ansi-escapes": "^3.0.0", @@ -16,19 +16,19 @@ "istanbul-lib-instrument": "^1.8.0", "istanbul-lib-source-maps": "^1.2.1", "jest-changed-files": "^22.2.0", - "jest-config": "^23.0.0-alpha.0", - "jest-environment-jsdom": "^23.0.0-alpha.0", + "jest-config": "^22.4.2", + "jest-environment-jsdom": "^22.4.1", "jest-get-type": "^22.1.0", - "jest-haste-map": "^23.0.0-alpha.0", - "jest-message-util": "^23.0.0-alpha.0", + "jest-haste-map": "^22.4.2", + "jest-message-util": "^22.4.0", "jest-regex-util": "^22.1.0", "jest-resolve-dependencies": "^22.1.0", - "jest-runner": "^23.0.0-alpha.0", - "jest-runtime": "^23.0.0-alpha.0", - "jest-snapshot": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", - "jest-validate": "^23.0.0-alpha.0", - "jest-worker": "^23.0.0-alpha.0", + "jest-runner": "^22.4.2", + "jest-runtime": "^22.4.2", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.2", + "jest-worker": "^22.2.2", "micromatch": "^2.3.11", "node-notifier": "^5.2.1", "realpath-native": "^1.0.0", diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index 91162a9b5f25..bce96faa1336 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -1,6 +1,6 @@ { "name": "jest-config", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,14 +10,14 @@ "dependencies": { "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^23.0.0-alpha.0", - "jest-environment-node": "^23.0.0-alpha.0", + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1", "jest-get-type": "^22.1.0", - "jest-jasmine2": "^23.0.0-alpha.0", + "jest-jasmine2": "^22.4.2", "jest-regex-util": "^22.1.0", - "jest-resolve": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", - "jest-validate": "^23.0.0-alpha.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.2", "pretty-format": "^22.4.0" } } diff --git a/packages/jest-editor-support/package.json b/packages/jest-editor-support/package.json index 7396c9adffde..6ffa39f5aa34 100644 --- a/packages/jest-editor-support/package.json +++ b/packages/jest-editor-support/package.json @@ -1,6 +1,6 @@ { "name": "jest-editor-support", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "dependencies": { "babel-traverse": "^6.14.1", "babylon": "^6.14.1", - "jest-snapshot": "^23.0.0-alpha.0" + "jest-snapshot": "^22.4.0" }, "typings": "index.d.ts" } diff --git a/packages/jest-environment-jsdom/package.json b/packages/jest-environment-jsdom/package.json index f7df54c44121..e848a4a388ca 100644 --- a/packages/jest-environment-jsdom/package.json +++ b/packages/jest-environment-jsdom/package.json @@ -1,6 +1,6 @@ { "name": "jest-environment-jsdom", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,8 +8,8 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-mock": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", + "jest-mock": "^22.2.0", + "jest-util": "^22.4.1", "jsdom": "^11.5.1" } } diff --git a/packages/jest-environment-node/package.json b/packages/jest-environment-node/package.json index 9ab93c26e7fd..3bd2d268e4c1 100644 --- a/packages/jest-environment-node/package.json +++ b/packages/jest-environment-node/package.json @@ -1,6 +1,6 @@ { "name": "jest-environment-node", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-mock": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0" + "jest-mock": "^22.2.0", + "jest-util": "^22.4.1" } } diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index 739d40a39640..d6f5924c601a 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -1,6 +1,6 @@ { "name": "jest-haste-map", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,7 +12,7 @@ "graceful-fs": "^4.1.11", "jest-docblock": "^22.4.0", "jest-serializer": "^22.4.0", - "jest-worker": "^23.0.0-alpha.0", + "jest-worker": "^22.2.2", "micromatch": "^2.3.11", "sane": "^2.0.0" } diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index 538b9e680286..4e260e5f98dc 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -1,6 +1,6 @@ { "name": "jest-jasmine2", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,17 +10,17 @@ "dependencies": { "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^23.0.0-alpha.0", + "expect": "^22.4.0", "graceful-fs": "^4.1.11", "is-generator-fn": "^1.0.0", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^23.0.0-alpha.0", - "jest-message-util": "^23.0.0-alpha.0", - "jest-snapshot": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", "source-map-support": "^0.5.0" }, "devDependencies": { - "jest-runtime": "^23.0.0-alpha.0" + "jest-runtime": "^22.4.2" } } diff --git a/packages/jest-matcher-utils/package.json b/packages/jest-matcher-utils/package.json index 4742e40f9ee2..3b2fd408ea8b 100644 --- a/packages/jest-matcher-utils/package.json +++ b/packages/jest-matcher-utils/package.json @@ -1,7 +1,7 @@ { "name": "jest-matcher-utils", "description": "A set of utility functions for expect and related packages", - "version": "23.0.0-alpha.0", + "version": "22.4.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index d09473737ff6..e4a9226264ff 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -1,6 +1,6 @@ { "name": "jest-message-util", - "version": "23.0.0-alpha.0", + "version": "22.4.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-mock/package.json b/packages/jest-mock/package.json index 9018dfe2b45c..a78fad3f89c4 100644 --- a/packages/jest-mock/package.json +++ b/packages/jest-mock/package.json @@ -1,6 +1,6 @@ { "name": "jest-mock", - "version": "23.0.0-alpha.0", + "version": "22.2.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest-repl/package.json b/packages/jest-repl/package.json index 985b3924b3fa..11384aa07afa 100644 --- a/packages/jest-repl/package.json +++ b/packages/jest-repl/package.json @@ -1,6 +1,6 @@ { "name": "jest-repl", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,8 +8,8 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-runtime": "^23.0.0-alpha.0", - "jest-validate": "^23.0.0-alpha.0", + "jest-runtime": "^22.4.2", + "jest-validate": "^22.4.2", "repl": "^0.1.3", "yargs": "^11.0.0" }, diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index 66788533cc49..c6259e8b9cd7 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -1,6 +1,6 @@ { "name": "jest-resolve", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -13,6 +13,6 @@ "realpath-native": "^1.0.0" }, "devDependencies": { - "jest-haste-map": "^23.0.0-alpha.0" + "jest-haste-map": "^22.4.2" } } diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 3f7b1c0db038..a086ba78223f 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -1,6 +1,6 @@ { "name": "jest-runner", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,15 +9,15 @@ "main": "build/index.js", "dependencies": { "exit": "^0.1.2", - "jest-config": "^23.0.0-alpha.0", + "jest-config": "^22.4.2", "jest-docblock": "^22.4.0", - "jest-haste-map": "^23.0.0-alpha.0", - "jest-jasmine2": "^23.0.0-alpha.0", + "jest-haste-map": "^22.4.2", + "jest-jasmine2": "^22.4.2", "jest-leak-detector": "^22.4.0", - "jest-message-util": "^23.0.0-alpha.0", - "jest-runtime": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", - "jest-worker": "^23.0.0-alpha.0", + "jest-message-util": "^22.4.0", + "jest-runtime": "^22.4.2", + "jest-util": "^22.4.1", + "jest-worker": "^22.2.2", "throat": "^4.0.0" } } diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 4839d52ace26..2be9b584d4aa 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -1,6 +1,6 @@ { "name": "jest-runtime", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,18 +9,18 @@ "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", - "babel-jest": "^23.0.0-alpha.0", + "babel-jest": "^22.4.1", "babel-plugin-istanbul": "^4.1.5", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "exit": "^0.1.2", "graceful-fs": "^4.1.11", - "jest-config": "^23.0.0-alpha.0", - "jest-haste-map": "^23.0.0-alpha.0", + "jest-config": "^22.4.2", + "jest-haste-map": "^22.4.2", "jest-regex-util": "^22.1.0", - "jest-resolve": "^23.0.0-alpha.0", - "jest-util": "^23.0.0-alpha.0", - "jest-validate": "^23.0.0-alpha.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.2", "json-stable-stringify": "^1.0.1", "micromatch": "^2.3.11", "realpath-native": "^1.0.0", @@ -30,8 +30,8 @@ "yargs": "^11.0.0" }, "devDependencies": { - "jest-environment-jsdom": "^23.0.0-alpha.0", - "jest-environment-node": "^23.0.0-alpha.0" + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1" }, "bin": { "jest-runtime": "./bin/jest-runtime.js" diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index a14144e36c88..36020d49e835 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -1,6 +1,6 @@ { "name": "jest-snapshot", - "version": "23.0.0-alpha.0", + "version": "22.4.0", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -10,7 +10,7 @@ "dependencies": { "chalk": "^2.0.1", "jest-diff": "^22.4.0", - "jest-matcher-utils": "^23.0.0-alpha.0", + "jest-matcher-utils": "^22.4.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "pretty-format": "^22.4.0" diff --git a/packages/jest-test-typescript-parser/package.json b/packages/jest-test-typescript-parser/package.json index fe758d6c2701..96e3aa49583f 100644 --- a/packages/jest-test-typescript-parser/package.json +++ b/packages/jest-test-typescript-parser/package.json @@ -1,6 +1,6 @@ { "name": "jest-test-typescript-parser", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -8,7 +8,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "jest-editor-support": "^23.0.0-alpha.0", + "jest-editor-support": "^22.4.1", "typescript": "^2.5.3" } } diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index eae8a8269eb7..1b42a21620f2 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -1,6 +1,6 @@ { "name": "jest-util", - "version": "23.0.0-alpha.0", + "version": "22.4.1", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -12,11 +12,11 @@ "chalk": "^2.0.1", "graceful-fs": "^4.1.11", "is-ci": "^1.0.10", - "jest-message-util": "^23.0.0-alpha.0", + "jest-message-util": "^22.4.0", "mkdirp": "^0.5.1", "source-map": "^0.6.0" }, "devDependencies": { - "jest-mock": "^23.0.0-alpha.0" + "jest-mock": "^22.2.0" } } diff --git a/packages/jest-validate/package.json b/packages/jest-validate/package.json index 03f9c2e54a94..6aba0cc0dd73 100644 --- a/packages/jest-validate/package.json +++ b/packages/jest-validate/package.json @@ -1,6 +1,6 @@ { "name": "jest-validate", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" @@ -9,7 +9,7 @@ "main": "build/index.js", "dependencies": { "chalk": "^2.0.1", - "jest-config": "^23.0.0-alpha.0", + "jest-config": "^22.4.2", "jest-get-type": "^22.1.0", "leven": "^2.1.0", "pretty-format": "^22.4.0" diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index 1844802b4259..6d741c362541 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -1,6 +1,6 @@ { "name": "jest-worker", - "version": "23.0.0-alpha.0", + "version": "22.2.2", "repository": { "type": "git", "url": "https://github.com/facebook/jest.git" diff --git a/packages/jest/package.json b/packages/jest/package.json index fba080817b63..e057995563d9 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -1,11 +1,11 @@ { "name": "jest", "description": "Delightful JavaScript Testing.", - "version": "23.0.0-alpha.0", + "version": "22.4.2", "main": "build/jest.js", "dependencies": { "import-local": "^1.0.0", - "jest-cli": "^23.0.0-alpha.0" + "jest-cli": "^22.4.2" }, "bin": { "jest": "./bin/jest.js" From 3a99e765d75777460b49e2ee376a2d0de2d6eb40 Mon Sep 17 00:00:00 2001 From: Avraam Mavridis Date: Sat, 17 Mar 2018 09:57:41 +0100 Subject: [PATCH 16/37] Update istanbul depedency to fix coverage issue (#5809) Minimize lockfile diff Update istanbul depedency to fix coverage issue Update istanbul depedency to fix coverage issue update test snapshot --- .../__snapshots__/transform.test.js.snap | 2 +- package.json | 2 +- packages/jest-cli/package.json | 2 +- yarn.lock | 331 ++++++++++++++++-- 4 files changed, 304 insertions(+), 33 deletions(-) diff --git a/integration-tests/__tests__/__snapshots__/transform.test.js.snap b/integration-tests/__tests__/__snapshots__/transform.test.js.snap index 57f504e5b334..590fcf1b6b24 100644 --- a/integration-tests/__tests__/__snapshots__/transform.test.js.snap +++ b/integration-tests/__tests__/__snapshots__/transform.test.js.snap @@ -14,7 +14,7 @@ exports[`custom transformer instruments files 1`] = ` "----------|----------|----------|----------|----------|-------------------| File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | ----------|----------|----------|----------|----------|-------------------| -All files | Unknown | Unknown | Unknown | Unknown | | +All files | 0 | 0 | 0 | 0 | | ----------|----------|----------|----------|----------|-------------------| " `; diff --git a/package.json b/package.json index 4df23fb73463..d6745ddc561c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "glob": "^7.1.1", "graceful-fs": "^4.1.11", "immutable": "^4.0.0-rc.7", - "istanbul-api": "^1.1.0", + "istanbul-api": "^1.3.1", "istanbul-lib-coverage": "^1.0.0", "jasmine-reporters": "^2.2.0", "jquery": "^3.2.1", diff --git a/packages/jest-cli/package.json b/packages/jest-cli/package.json index 07de853f620a..3e4bfd85189a 100644 --- a/packages/jest-cli/package.json +++ b/packages/jest-cli/package.json @@ -11,7 +11,7 @@ "graceful-fs": "^4.1.11", "import-local": "^1.0.0", "is-ci": "^1.0.10", - "istanbul-api": "^1.1.14", + "istanbul-api": "^1.3.1", "istanbul-lib-coverage": "^1.1.1", "istanbul-lib-instrument": "^1.8.0", "istanbul-lib-source-maps": "^1.2.1", diff --git a/yarn.lock b/yarn.lock index efbe6e3cae16..c0a224cb4b20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -599,6 +599,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@*, babel-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.4.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -625,6 +632,10 @@ babel-plugin-istanbul@^4.1.5: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" +babel-plugin-jest-hoist@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63" + babel-plugin-react-transform@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" @@ -1038,6 +1049,13 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a" + dependencies: + babel-plugin-jest-hoist "^22.4.1" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-react-native@*, babel-preset-react-native@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959" @@ -1994,6 +2012,10 @@ compare-func@^1.3.1: array-ify "^1.0.0" dot-prop "^3.0.0" +compare-versions@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -3286,6 +3308,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expect@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + express-session@~1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" @@ -4615,66 +4648,67 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.0, istanbul-api@^1.1.14: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.2.tgz#e17cd519dd5ec4141197f246fdf380b75487f3b1" +istanbul-api@^1.1.14, istanbul-api@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" dependencies: async "^2.1.4" + compare-versions "^3.1.0" fileset "^2.0.2" - istanbul-lib-coverage "^1.1.2" - istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.2" - istanbul-lib-report "^1.1.3" - istanbul-lib-source-maps "^1.2.3" - istanbul-reports "^1.1.4" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" -istanbul-lib-hook@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" +istanbul-lib-hook@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.1.2" + istanbul-lib-coverage "^1.2.0" semver "^5.3.0" -istanbul-lib-report@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" dependencies: - istanbul-lib-coverage "^1.1.2" + istanbul-lib-coverage "^1.2.0" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" dependencies: debug "^3.1.0" - istanbul-lib-coverage "^1.1.2" + istanbul-lib-coverage "^1.2.0" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" dependencies: handlebars "^4.0.3" @@ -4689,10 +4723,80 @@ jasmine-reporters@^2.2.0: mkdirp "^0.5.1" xmldom "^0.1.22" +jest-cli@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.2.0" + jest-config "^22.4.2" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.2" + jest-runtime "^22.4.2" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.2" + jest-worker "^22.2.2" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + +jest-config@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + pretty-format "^22.4.0" + jest-docblock@^21, jest-docblock@^21.0.0, jest-docblock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" +jest-environment-jsdom@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jsdom "^11.5.1" + +jest-environment-node@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jest-haste-map@^21: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" @@ -4704,6 +4808,150 @@ jest-haste-map@^21: sane "^2.0.0" worker-farm "^1.3.1" +jest-haste-map@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.4.0" + jest-serializer "^22.4.0" + jest-worker "^22.2.2" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + +jest-matcher-utils@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + +jest-message-util@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" + +jest-resolve@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-runner@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87" + dependencies: + exit "^0.1.2" + jest-config "^22.4.2" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.2" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.2" + jest-util "^22.4.1" + jest-worker "^22.2.2" + throat "^4.0.0" + +jest-runtime@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.4.1" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.4.2" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-snapshot@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.0" + +jest-util@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.0" + mkdirp "^0.5.1" + source-map "^0.6.0" + +jest-validate@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.2" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.4.0" + +jest-worker@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" + dependencies: + merge-stream "^1.0.1" + +jest@*: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20" + dependencies: + import-local "^1.0.0" + jest-cli "^22.4.2" + jquery@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -8719,12 +8967,35 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" dependencies: camelcase "^4.1.0" +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + yargs@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" From b9ed1153b83163b278c355fb80cd8cd0c7c51b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Sat, 17 Mar 2018 17:48:13 -0300 Subject: [PATCH 17/37] Update Webpack guide to use babel preset-env (#5821) --- docs/Webpack.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Webpack.md b/docs/Webpack.md index ade707c8964e..a78fde711c74 100644 --- a/docs/Webpack.md +++ b/docs/Webpack.md @@ -244,7 +244,7 @@ ES modules to CommonJS modules only in the `test` environment. ```json // .babelrc { - "presets": [["es2015", {"modules": false}]], + "presets": [["env", {"modules": false}]], "env": { "test": { @@ -263,7 +263,7 @@ need to enable the `dynamic-import-node` plugin. ```json // .babelrc { - "presets": [["es2015", {"modules": false}]], + "presets": [["env", {"modules": false}]], "plugins": ["syntax-dynamic-import"], From 442e93d488bd1b0233c8fcdc836c9e28104194ae Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Sun, 18 Mar 2018 04:39:07 -0400 Subject: [PATCH 18/37] Update to React 16, handle React.Fragment better (#5816) * Add React.Fragment to snapshots in unhandled cases * Add test * Upgrade to React 16 * Fix flow * Convert to class component --- .../__tests__/checkbox_with_label.test.js | 6 +- .../__tests__/checkbox_with_label.test.js | 2 +- examples/typescript/CheckboxWithLabel.tsx | 24 +- package.json | 10 +- .../pretty-format/src/__tests__/react.test.js | 27 + .../src/plugins/react_element.js | 4 + yarn.lock | 510 ++++++------------ 7 files changed, 216 insertions(+), 367 deletions(-) diff --git a/examples/enzyme/__tests__/checkbox_with_label.test.js b/examples/enzyme/__tests__/checkbox_with_label.test.js index b0729c81711d..a8e08b42b10a 100644 --- a/examples/enzyme/__tests__/checkbox_with_label.test.js +++ b/examples/enzyme/__tests__/checkbox_with_label.test.js @@ -3,7 +3,11 @@ /* eslint-disable no-unused-vars */ import React from 'react'; -import {shallow} from 'enzyme'; +import Enzyme, {shallow} from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +Enzyme.configure({adapter: new Adapter()}); + import CheckboxWithLabel from '../CheckboxWithLabel'; it('CheckboxWithLabel changes the text after click', () => { diff --git a/examples/react/__tests__/checkbox_with_label.test.js b/examples/react/__tests__/checkbox_with_label.test.js index 5371cdcf41b3..fab2050fd26b 100644 --- a/examples/react/__tests__/checkbox_with_label.test.js +++ b/examples/react/__tests__/checkbox_with_label.test.js @@ -4,7 +4,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import TestUtils from 'react-addons-test-utils'; +import * as TestUtils from 'react-dom/test-utils'; import CheckboxWithLabel from '../CheckboxWithLabel'; it('CheckboxWithLabel changes the text after click', () => { diff --git a/examples/typescript/CheckboxWithLabel.tsx b/examples/typescript/CheckboxWithLabel.tsx index 494f6cb63bf1..1e8c59a611dc 100644 --- a/examples/typescript/CheckboxWithLabel.tsx +++ b/examples/typescript/CheckboxWithLabel.tsx @@ -2,31 +2,33 @@ import * as React from 'react' -interface CheckboxWithLabelProps extends React.Props { +interface CheckboxWithLabelProps { labelOff: string; labelOn: string; } -var CheckboxWithLabel = React.createClass( { - getInitialState: function() { - return {isChecked: false} - }, - onChange: function() { - this.setState({isChecked: !this.state.isChecked}); - }, +interface CheckboxWithLabelState { + isChecked: boolean; +} + +class CheckboxWithLabel extends React.Component { + constructor(props: CheckboxWithLabelProps) { + super(props); + this.state = {isChecked: false}; + } - render: function() { + render() { return ( ); } -}); +} export = CheckboxWithLabel; diff --git a/package.json b/package.json index d6745ddc561c..612dc7e98196 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "codecov": "^3.0.0", "cross-spawn": "^6.0.4", "debug": "^3.0.1", - "enzyme": "^2.8.2", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "eslint": "~4.13.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-babel": "^4.1.1", @@ -58,10 +59,9 @@ "prettier": "^1.11.0", "prettylint": "^1.0.0", "progress": "^2.0.0", - "react": "^15.4.2", - "react-addons-test-utils": "^15.4.2", - "react-dom": "^15.6.1", - "react-test-renderer": "^15.4.2", + "react": "^16.2.0", + "react-dom": "^16.2.0", + "react-test-renderer": "^16.2.0", "regenerator-runtime": "^0.11.0", "resolve": "^1.4.0", "rimraf": "^2.6.2", diff --git a/packages/pretty-format/src/__tests__/react.test.js b/packages/pretty-format/src/__tests__/react.test.js index efa597981b8f..f136884305d9 100644 --- a/packages/pretty-format/src/__tests__/react.test.js +++ b/packages/pretty-format/src/__tests__/react.test.js @@ -13,6 +13,7 @@ const React = require('react'); const renderer = require('react-test-renderer'); const elementSymbol = Symbol.for('react.element'); +const fragmentSymbol = Symbol.for('react.fragment'); const testSymbol = Symbol.for('react.test.json'); const prettyFormat = require('..'); @@ -300,6 +301,32 @@ test('supports undefined element type', () => { ); }); +test('supports a fragment with no children', () => { + expect( + formatElement({$$typeof: elementSymbol, props: {}, type: fragmentSymbol}), + ).toEqual(''); +}); + +test('supports a fragment with string child', () => { + expect( + formatElement({ + $$typeof: elementSymbol, + props: {children: 'test'}, + type: fragmentSymbol, + }), + ).toEqual('\n test\n'); +}); + +test('supports a fragment with element child', () => { + expect( + formatElement({ + $$typeof: elementSymbol, + props: {children: React.createElement('div', null, 'test')}, + type: fragmentSymbol, + }), + ).toEqual('\n
\n test\n
\n
'); +}); + test('supports a single element with React elements with a child', () => { assertPrintedJSX( React.createElement('Mouse', { diff --git a/packages/pretty-format/src/plugins/react_element.js b/packages/pretty-format/src/plugins/react_element.js index f90ff1ee279e..bd261491c6b6 100644 --- a/packages/pretty-format/src/plugins/react_element.js +++ b/packages/pretty-format/src/plugins/react_element.js @@ -17,6 +17,7 @@ import { } from './lib/markup'; const elementSymbol = Symbol.for('react.element'); +const fragmentSymbol = Symbol.for('react.fragment'); // Given element.props.children, or subtree during recursive traversal, // return flattened array of children. @@ -38,6 +39,9 @@ const getType = element => { if (typeof element.type === 'function') { return element.type.displayName || element.type.name || 'Unknown'; } + if (element.type === fragmentSymbol) { + return 'React.Fragment'; + } return 'UNDEFINED'; }; diff --git a/yarn.lock b/yarn.lock index c0a224cb4b20..882a338325d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,10 @@ dependencies: acorn "^5.2.1" +"@types/node@*": + version "9.4.7" + resolved "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275" + JSONStream@^1.0.3, JSONStream@^1.0.4: version "1.3.2" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" @@ -599,13 +603,6 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@*, babel-jest@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd" - dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.1" - babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -632,10 +629,6 @@ babel-plugin-istanbul@^4.1.5: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" -babel-plugin-jest-hoist@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63" - babel-plugin-react-transform@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" @@ -1049,13 +1042,6 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-jest@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a" - dependencies: - babel-plugin-jest-hoist "^22.4.1" - babel-plugin-syntax-object-rest-spread "^6.13.0" - babel-preset-react-native@*, babel-preset-react-native@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959" @@ -1777,26 +1763,16 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" entities "~1.1.1" htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" + lodash "^4.15.0" + parse5 "^3.0.1" chokidar@^1.0.0, chokidar@^1.4.1: version "1.7.0" @@ -1948,6 +1924,10 @@ color@^2.0.1: color-convert "^1.9.1" color-string "^1.5.2" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -2714,6 +2694,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2940,20 +2924,46 @@ envinfo@^3.0.0: os-name "^2.0.1" which "^1.2.14" -enzyme@^2.8.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" +enzyme-adapter-react-16@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4" + dependencies: + enzyme-adapter-utils "^1.3.0" + lodash "^4.17.4" + object.assign "^4.0.4" + object.values "^1.0.4" + prop-types "^15.6.0" + react-reconciler "^0.7.0" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" + dependencies: + lodash "^4.17.4" + object.assign "^4.0.4" + prop-types "^15.6.0" + +enzyme@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.0.3" + has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" is-subset "^0.1.1" lodash "^4.17.4" + object-inspect "^1.5.0" object-is "^1.0.1" - object.assign "^4.0.4" + object.assign "^4.1.0" object.entries "^1.0.4" object.values "^1.0.4" - prop-types "^15.5.10" - uuid "^3.0.1" + raf "^3.4.0" + rst-selector-parser "^2.2.3" errno@^0.1.1, errno@~0.1.1, errno@~0.1.7: version "0.1.7" @@ -3308,17 +3318,6 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-regex-util "^22.1.0" - express-session@~1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" @@ -3672,7 +3671,7 @@ function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -function.prototype.name@^1.0.0: +function.prototype.name@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" dependencies: @@ -4381,6 +4380,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4485,6 +4488,10 @@ is-my-json-valid@^2.12.4: jsonpointer "^4.0.0" xtend "^4.0.0" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + is-number@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" @@ -4567,6 +4574,10 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -4648,7 +4659,7 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.14, istanbul-api@^1.3.1: +istanbul-api@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" dependencies: @@ -4723,80 +4734,10 @@ jasmine-reporters@^2.2.0: mkdirp "^0.5.1" xmldom "^0.1.22" -jest-cli@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.2.0" - jest-config "^22.4.2" - jest-environment-jsdom "^22.4.1" - jest-get-type "^22.1.0" - jest-haste-map "^22.4.2" - jest-message-util "^22.4.0" - jest-regex-util "^22.1.0" - jest-resolve-dependencies "^22.1.0" - jest-runner "^22.4.2" - jest-runtime "^22.4.2" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" - jest-validate "^22.4.2" - jest-worker "^22.2.2" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-config@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.4.1" - jest-environment-node "^22.4.1" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.4.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.2" - pretty-format "^22.4.0" - jest-docblock@^21, jest-docblock@^21.0.0, jest-docblock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-environment-jsdom@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" - dependencies: - jest-mock "^22.2.0" - jest-util "^22.4.1" - jsdom "^11.5.1" - -jest-environment-node@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" - dependencies: - jest-mock "^22.2.0" - jest-util "^22.4.1" - jest-haste-map@^21: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" @@ -4808,150 +4749,6 @@ jest-haste-map@^21: sane "^2.0.0" worker-farm "^1.3.1" -jest-haste-map@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.4.0" - jest-serializer "^22.4.0" - jest-worker "^22.2.2" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" - dependencies: - chalk "^2.0.1" - co "^4.6.0" - expect "^22.4.0" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" - source-map-support "^0.5.0" - -jest-matcher-utils@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^22.4.0" - -jest-message-util@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" - -jest-resolve@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - -jest-runner@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87" - dependencies: - exit "^0.1.2" - jest-config "^22.4.2" - jest-docblock "^22.4.0" - jest-haste-map "^22.4.2" - jest-jasmine2 "^22.4.2" - jest-leak-detector "^22.4.0" - jest-message-util "^22.4.0" - jest-runtime "^22.4.2" - jest-util "^22.4.1" - jest-worker "^22.2.2" - throat "^4.0.0" - -jest-runtime@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3" - dependencies: - babel-core "^6.0.0" - babel-jest "^22.4.1" - babel-plugin-istanbul "^4.1.5" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.4.2" - jest-haste-map "^22.4.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.2" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" - -jest-snapshot@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" - dependencies: - chalk "^2.0.1" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.4.0" - -jest-util@^22.4.1: - version "22.4.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.0" - mkdirp "^0.5.1" - source-map "^0.6.0" - -jest-validate@^22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" - dependencies: - chalk "^2.0.1" - jest-config "^22.4.2" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^22.4.0" - -jest-worker@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" - dependencies: - merge-stream "^1.0.1" - -jest@*: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20" - dependencies: - import-local "^1.0.0" - jest-cli "^22.4.2" - jquery@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -5418,35 +5215,15 @@ lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" dependencies: lodash._root "^3.0.0" -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - -lodash.flatten@^4.2.0: +lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" lodash.isarguments@^3.0.0: version "3.1.0" @@ -5464,18 +5241,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" -lodash.merge@^4.4.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - lodash.pad@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" @@ -5488,26 +5257,10 @@ lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -6042,6 +5795,15 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +nearley@^2.7.10: + version "2.13.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.13.0.tgz#6e7b0f4e68bfc3e74c99eaef2eda39e513143439" + dependencies: + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + semver "^5.4.1" + negotiator@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" @@ -6147,6 +5909,13 @@ nodemailer@^2.5.0: nodemailer-smtp-transport "2.7.2" socks "1.1.9" +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -6226,6 +5995,10 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" @@ -6246,7 +6019,7 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" -object.assign@^4.0.4: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" dependencies: @@ -6499,6 +6272,12 @@ parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -6842,6 +6621,23 @@ quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" @@ -6900,10 +6696,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-addons-test-utils@^15.4.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" - react-clone-referenced-element@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" @@ -6923,7 +6715,7 @@ react-dom-factories@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.2.tgz#eb7705c4db36fb501b3aa38ff759616aa0ff96e0" -react-dom@^15.5.4, react-dom@^15.6.1: +react-dom@^15.5.4: version "15.6.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" dependencies: @@ -6932,6 +6724,15 @@ react-dom@^15.5.4, react-dom@^15.6.1: object-assign "^4.1.0" prop-types "^15.5.10" +react-dom@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + react-native@^0.51.0: version "0.51.1" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.51.1.tgz#be47ef396c07151722cf8246c942686d6df1170e" @@ -6997,12 +6798,22 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-test-renderer@*, react-test-renderer@^15.4.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.2.tgz#d0333434fc2c438092696ca770da5ed48037efa8" +react-reconciler@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" dependencies: - fbjs "^0.8.9" - object-assign "^4.1.0" + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-test-renderer@*, react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" + dependencies: + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" react-timer-mixin@^0.13.2: version "0.13.3" @@ -7024,7 +6835,7 @@ react@16.0.0: object-assign "^4.1.1" prop-types "^15.6.0" -react@^15.4.2, react@^15.5.4: +react@^15.5.4: version "15.6.2" resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" dependencies: @@ -7034,6 +6845,15 @@ react@^15.4.2, react@^15.5.4: object-assign "^4.1.0" prop-types "^15.5.10" +react@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" @@ -7458,6 +7278,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -7560,6 +7384,13 @@ rollup@^0.56.2: version "0.56.3" resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.56.3.tgz#7900695531afa1badd3235f285cc4aa0d49ce254" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -8482,6 +8313,10 @@ underscore@^1.7.0, underscore@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + unherit@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" @@ -8967,35 +8802,12 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - dependencies: - camelcase "^4.1.0" - yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - yargs@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" From b76afc2bf06b17764f08dfa5d4754f7b0a27ba54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Berg=C3=A9?= Date: Sun, 18 Mar 2018 19:59:32 +0100 Subject: [PATCH 19/37] Replace jest-puppeteer-preset by jest-puppeteer (#5825) I deprecated "jest-puppeteer-preset" in favor of "jest-puppeteer". It is just a fix in documentation. --- docs/Puppeteer.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Puppeteer.md b/docs/Puppeteer.md index f38b0427b7dd..7961476073b2 100644 --- a/docs/Puppeteer.md +++ b/docs/Puppeteer.md @@ -9,20 +9,20 @@ work smoothly with [puppeteer](https://github.com/GoogleChrome/puppeteer). ## Use Puppeteer Preset -[Jest Puppeteer Preset](https://github.com/smooth-code/jest-puppeteer) provides -all required configuration to run your tests using Puppeteer. +[Jest Puppeteer](https://github.com/smooth-code/jest-puppeteer) provides all +required configuration to run your tests using Puppeteer. -1. First install `jest-puppeteer-preset` +1. First install `jest-puppeteer` ``` -yarn add --dev jest-puppeteer-preset +yarn add --dev jest-puppeteer ``` 2. Specify preset in your Jest configuration: ```json { - "preset": "jest-puppeteer-preset" + "preset": "jest-puppeteer" } ``` From 920243955f461ad99642441f18526670b20b23f8 Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Sun, 18 Mar 2018 21:46:35 -0400 Subject: [PATCH 20/37] Add missing changelog for #5816 (#5827) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5fe04d618ee..a985276ab137 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ ([#5702](https://github.com/facebook/jest/pull/5702)) * `[jest-mock]` Prevent `mockRejectedValue` from causing unhandled rejection ([#5720](https://github.com/facebook/jest/pull/5720)) +* `[pretty-format]` Handle React fragments better + ([#5816](https://github.com/facebook/jest/pull/5816)) ### Chore & Maintenance From 124067e7d662364d40fc662ef54bfddd798c57c4 Mon Sep 17 00:00:00 2001 From: David Gomes Date: Mon, 19 Mar 2018 19:33:19 +0000 Subject: [PATCH 21/37] Fix typo in Es6ClassMocks.md (#5833) --- docs/Es6ClassMocks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Es6ClassMocks.md b/docs/Es6ClassMocks.md index e9f8ae02ca5c..bc29bb3bcdc4 100644 --- a/docs/Es6ClassMocks.md +++ b/docs/Es6ClassMocks.md @@ -214,7 +214,7 @@ class, but does not provide a way to spy on calls. For the contrived example, the mock might look like this: ```javascript -// __mocks/sound-player.js +// __mocks__/sound-player.js export default class SoundPlayer { constructor() { console.log('Mock SoundPlayer: constructor was called'); From e566a8f4106ac25b008744ffc42204554fd31cf6 Mon Sep 17 00:00:00 2001 From: "Chris J. Lee" Date: Tue, 20 Mar 2018 11:02:01 -0500 Subject: [PATCH 22/37] fix: update dependency explicitly for babel-plugin-istanbul (#5799) * fix: update dependency explicitly for babel-plugin-istanbul * update lockfile --- packages/babel-jest/package.json | 2 +- yarn.lock | 520 ++++++++++++++++++++++++++++++- 2 files changed, 504 insertions(+), 18 deletions(-) diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index 20611e94fde6..43fb40558063 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -9,7 +9,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "babel-plugin-istanbul": "^4.1.5", + "babel-plugin-istanbul": "^4.1.6", "babel-preset-jest": "^22.4.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 882a338325d9..c5c74c05a2d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -263,10 +263,18 @@ arr-diff@^2.0.0: dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" @@ -324,6 +332,10 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -366,6 +378,10 @@ assert@^1.4.0: dependencies: util "0.10.3" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -412,6 +428,10 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + autolinker@~0.15.0: version "0.15.3" resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-0.15.3.tgz#342417d8f2f3461b14cf09088d5edf8791dc9832" @@ -621,13 +641,14 @@ babel-plugin-external-helpers@^6.18.0, babel-plugin-external-helpers@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" +babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" babel-plugin-react-transform@^3.0.0: version "3.0.0" @@ -1181,6 +1202,18 @@ base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + basic-auth-connect@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" @@ -1342,6 +1375,23 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1657,6 +1707,20 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cached-path-relative@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" @@ -1808,6 +1872,15 @@ circular-json@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.1.tgz#b8942a09e535863dc21b04417a91971e1d9cd91f" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" @@ -1896,6 +1969,13 @@ collapse-white-space@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -2000,7 +2080,7 @@ component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" -component-emitter@1.2.1: +component-emitter@1.2.1, component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -2306,6 +2386,10 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -2507,7 +2591,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6: +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2536,6 +2620,10 @@ decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2577,6 +2665,25 @@ define-properties@^1.1.2: foreach "^2.0.5" object-keys "^1.0.8" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -3305,6 +3412,18 @@ expand-brackets@^0.1.4: dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" @@ -3367,6 +3486,19 @@ express@^4.15.3: utils-merge "1.0.1" vary "~1.1.2" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3385,6 +3517,19 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -3488,6 +3633,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + finalhandler@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" @@ -3548,7 +3702,7 @@ follow-redirects@1.0.0: dependencies: debug "^2.2.0" -for-in@^1.0.1: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3594,6 +3748,12 @@ forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" @@ -3763,6 +3923,10 @@ get-uri@2: ftp "~0.3.10" readable-stream "2" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -4018,6 +4182,33 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.0, has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" @@ -4355,6 +4546,18 @@ irregular-plurals@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + is-alphabetical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" @@ -4404,6 +4607,18 @@ is-ci@^1.0.10: dependencies: ci-info "^1.0.0" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -4412,6 +4627,22 @@ is-decimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -4422,10 +4653,16 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" @@ -4508,6 +4745,10 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -4516,6 +4757,12 @@ is-object@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -4536,6 +4783,12 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -4604,6 +4857,10 @@ is-whitespace-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + is-word-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" @@ -4648,6 +4905,10 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -4686,7 +4947,7 @@ istanbul-lib-hook@^1.2.0: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0: +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0: version "1.10.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" dependencies: @@ -4947,7 +5208,7 @@ karma@^2.0.0: tmp "0.0.33" useragent "^2.1.12" -kind-of@^3.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -4959,6 +5220,14 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5425,6 +5694,10 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -5433,6 +5706,12 @@ map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + markdown-escapes@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" @@ -5569,6 +5848,24 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5655,6 +5952,13 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -5791,6 +6095,23 @@ nan@^2.0.5, nan@^2.3.0: version "2.9.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5995,6 +6316,14 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-inspect@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" @@ -6019,6 +6348,12 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -6051,6 +6386,12 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + object.values@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" @@ -6294,6 +6635,10 @@ parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + path-browserify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" @@ -6449,6 +6794,10 @@ pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7025,6 +7374,13 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -7096,7 +7452,7 @@ repeat-string@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" -repeat-string@^1.5.2, repeat-string@^1.5.4: +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -7254,6 +7610,10 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -7415,6 +7775,12 @@ safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + sane@^2.0.0: version "2.4.1" resolved "https://registry.yarnpkg.com/sane/-/sane-2.4.1.tgz#29f991208cf28636720efdc584293e7fd66663a5" @@ -7530,6 +7896,24 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7643,6 +8027,33 @@ smtp-connection@2.12.0: httpntlm "1.6.1" nodemailer-shared "1.1.0" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -7717,6 +8128,16 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -7729,6 +8150,10 @@ source-map-support@^0.5.0: dependencies: source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -7780,6 +8205,12 @@ spdx-license-ids@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" @@ -7822,6 +8253,13 @@ state-toggle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + statuses@1, "statuses@>= 1.3.1 < 2": version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -8085,12 +8523,12 @@ tempfile@^1.1.1: os-tmpdir "^1.0.0" uuid "^2.0.1" -test-exclude@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" +test-exclude@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" dependencies: arrify "^1.0.1" - micromatch "^2.3.11" + micromatch "^3.1.8" object-assign "^4.1.0" read-pkg-up "^1.0.1" require-main-filename "^1.0.1" @@ -8162,6 +8600,28 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" @@ -8336,6 +8796,15 @@ unified@^6.1.2: x-is-function "^1.0.4" x-is-string "^0.1.0" +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + unist-util-is@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" @@ -8364,10 +8833,21 @@ unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-join@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" @@ -8389,6 +8869,12 @@ urlgrey@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" + dependencies: + kind-of "^6.0.2" + useragent@^2.1.12: version "2.3.0" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" From c7108ed8ae830e5ee797bb35ffc438941a8ed049 Mon Sep 17 00:00:00 2001 From: Long Mai Date: Tue, 20 Mar 2018 21:36:36 -0500 Subject: [PATCH 23/37] fix a header in changelog (#5840) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a985276ab137..18a7885a6dc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -136,7 +136,7 @@ * `[docs]` Add a documentation note for project `displayName` configuration ([#5600](https://github.com/facebook/jest/pull/5600)) -# Chore & Maintenance +### Chore & Maintenance * `[docs]` Update automatic mocks documentation ([#5630](https://github.com/facebook/jest/pull/5630)) From 6851d8bc9d67e83fb1bb0199d28ef84565938225 Mon Sep 17 00:00:00 2001 From: Ran Yitzhaki Date: Wed, 21 Mar 2018 09:35:12 +0200 Subject: [PATCH 24/37] add a descriptive error for invalid globalSetup or globalTeardown (#5835) * add a descriptive error for cases that globalSetup or globalTeardown does not export a function * update changelog * fix(global_setup|global_teardown): fixed await call, change to TypeError, add path to error * refactor(global_setup|global_teardown): merge two expectations to one --- CHANGELOG.md | 3 +++ .../__tests__/global_setup.test.js | 12 ++++++++++ .../__tests__/global_teardown.test.js | 15 +++++++++++++ .../global-setup/invalid_setup.js | 1 + .../global-teardown/invalid_teardown.js | 1 + packages/jest-cli/src/run_jest.js | 22 +++++++++++++++++-- 6 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 integration-tests/global-setup/invalid_setup.js create mode 100644 integration-tests/global-teardown/invalid_teardown.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 18a7885a6dc9..a788a5edf2a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ ### Fixes +* `[jest-cli]` Add descriptive error message when trying to use + `globalSetup`/`globalTeardown` file that doesn't export a function. + ([#5835](https://github.com/facebook/jest/pull/5835)) * `[expect]` Do not rely on `instanceof RegExp`, since it will not work for RegExps created inside of a different VM ([#5729](https://github.com/facebook/jest/pull/5729)) diff --git a/integration-tests/__tests__/global_setup.test.js b/integration-tests/__tests__/global_setup.test.js index 1f957229e8e7..5c14ad22164d 100644 --- a/integration-tests/__tests__/global_setup.test.js +++ b/integration-tests/__tests__/global_setup.test.js @@ -27,3 +27,15 @@ test('globalSetup is triggered once before all test suites', () => { const setup = fs.readFileSync(path.join(DIR, files[0]), 'utf8'); expect(setup).toBe('setup'); }); + +test('jest throws an error when globalSetup does not export a function', () => { + const setupPath = path.resolve(__dirname, '../global-setup/invalid_setup.js'); + const {status, stderr} = runJest('global-setup', [ + `--globalSetup=${setupPath}`, + ]); + + expect(status).toBe(1); + expect(stderr).toMatch( + `TypeError: globalSetup file must export a function at ${setupPath}`, + ); +}); diff --git a/integration-tests/__tests__/global_teardown.test.js b/integration-tests/__tests__/global_teardown.test.js index 3c9efae86086..92e2e28486a3 100644 --- a/integration-tests/__tests__/global_teardown.test.js +++ b/integration-tests/__tests__/global_teardown.test.js @@ -34,3 +34,18 @@ test('globalTeardown is triggered once after all test suites', () => { const teardown = fs.readFileSync(path.join(DIR, files[0]), 'utf8'); expect(teardown).toBe('teardown'); }); + +test('jest throws an error when globalTeardown does not export a function', () => { + const teardownPath = path.resolve( + __dirname, + '../global-teardown/invalid_teardown.js', + ); + const {status, stderr} = runJest('global-teardown', [ + `--globalTeardown=${teardownPath}`, + ]); + + expect(status).toBe(1); + expect(stderr).toMatch( + `TypeError: globalTeardown file must export a function at ${teardownPath}`, + ); +}); diff --git a/integration-tests/global-setup/invalid_setup.js b/integration-tests/global-setup/invalid_setup.js new file mode 100644 index 000000000000..de4e062fb3c2 --- /dev/null +++ b/integration-tests/global-setup/invalid_setup.js @@ -0,0 +1 @@ +console.log('there is no exported function'); diff --git a/integration-tests/global-teardown/invalid_teardown.js b/integration-tests/global-teardown/invalid_teardown.js new file mode 100644 index 000000000000..de4e062fb3c2 --- /dev/null +++ b/integration-tests/global-teardown/invalid_teardown.js @@ -0,0 +1 @@ +console.log('there is no exported function'); diff --git a/packages/jest-cli/src/run_jest.js b/packages/jest-cli/src/run_jest.js index 8a3df9a0900d..f11bbf010ca3 100644 --- a/packages/jest-cli/src/run_jest.js +++ b/packages/jest-cli/src/run_jest.js @@ -202,7 +202,16 @@ export default (async function runJest({ setConfig(contexts, {cwd: process.cwd()}); if (globalConfig.globalSetup) { // $FlowFixMe - await require(globalConfig.globalSetup)(); + const globalSetup = require(globalConfig.globalSetup); + if (typeof globalSetup !== 'function') { + throw new TypeError( + `globalSetup file must export a function at ${ + globalConfig.globalSetup + }`, + ); + } + + await globalSetup(); } const results = await new TestScheduler( globalConfig, @@ -216,7 +225,16 @@ export default (async function runJest({ if (globalConfig.globalTeardown) { // $FlowFixMe - await require(globalConfig.globalTeardown)(); + const globalTeardown = require(globalConfig.globalTeardown); + if (typeof globalTeardown !== 'function') { + throw new TypeError( + `globalTeardown file must export a function at ${ + globalConfig.globalTeardown + }`, + ); + } + + await globalTeardown(); } return processResults(results, { isJSON: globalConfig.json, From 6a77ee37ec2d46ece7e9cfd0f891d11c113cc4c4 Mon Sep 17 00:00:00 2001 From: Stian Didriksen Date: Wed, 21 Mar 2018 21:27:20 +0100 Subject: [PATCH 25/37] Generating coverage for files passed in `--findRelatedTests`, `--onlyChanged` and `--watch` scenarios (#5601) * Jump start using the work from #4246 * checking how it looks without an extra flag * makes more sense to colocate the test here * remove mystery files * remove references to the flag * update docs * add test case for --onlyChanged and --coverage * update snapshot to what it should be * apply collectCoverageFrom patterns after finding tests * Collect possible coverage patterns while searching for tests * improve test results * hi there flow * skip on windows * will the windows build pass this time? * fix test on windows * remove underscore as it's no longer a private api * polymorphing * simplify test * increase test coverage in jest-config/normalize * make the linter happy again * should use argv as it's not a config option * test coverage for run_jest * update snapshots * remove object spread, replaced with Object.assign * add changelog entry --- CHANGELOG.md | 3 + docs/CLI.md | 4 +- integration-tests/Utils.js | 1 - .../find_related_files.test.js.snap | 54 +++++++++ .../__tests__/find_related_files.test.js | 77 ++++++++++-- .../__tests__/only_changed.test.js | 45 +++++++ .../__tests__/run_jest_with_coverage.test.js | 112 ++++++++++++++++++ packages/jest-cli/src/run_jest.js | 37 ++++++ packages/jest-cli/src/search_source.js | 61 +++++++--- .../src/__tests__/normalize.test.js | 25 ++++ packages/jest-config/src/index.js | 1 + packages/jest-config/src/normalize.js | 29 +++-- packages/jest-config/src/utils.js | 8 +- 13 files changed, 413 insertions(+), 44 deletions(-) create mode 100644 integration-tests/__tests__/__snapshots__/find_related_files.test.js.snap create mode 100644 packages/jest-cli/src/__tests__/run_jest_with_coverage.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index a788a5edf2a5..81183359d5a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ### Features +* `[jest-cli]` Add support for using `--coverage` in combination with watch + mode, `--onlyChanged`, `--findRelatedTests` and more + ([#5601](https://github.com/facebook/jest/pull/5601)) * `[jest-jasmine2]` Adds error throwing and descriptive errors to `it`/ `test` for invalid arguments. `[jest-circus]` Adds error throwing and descriptive errors to `it`/ `test` for invalid arguments diff --git a/docs/CLI.md b/docs/CLI.md index ad98e977b092..e30350ad48c2 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -189,7 +189,9 @@ Alias: `-e`. Use this flag to show full diffs and errors instead of a patch. Find and run the tests that cover a space separated list of source files that were passed in as arguments. Useful for pre-commit hook integration to run the -minimal amount of tests necessary. +minimal amount of tests necessary. Can be used together with `--coverage` to +include a test coverage for the source files, no duplicate +`--collectCoverageFrom` arguments needed. ### `--forceExit` diff --git a/integration-tests/Utils.js b/integration-tests/Utils.js index bad044ad6faf..899145fafe6b 100644 --- a/integration-tests/Utils.js +++ b/integration-tests/Utils.js @@ -166,7 +166,6 @@ const cleanupStackTrace = (output: string) => { module.exports = { cleanup, - cleanupStackTrace, copyDir, createEmptyPackage, extractSummary, diff --git a/integration-tests/__tests__/__snapshots__/find_related_files.test.js.snap b/integration-tests/__tests__/__snapshots__/find_related_files.test.js.snap new file mode 100644 index 000000000000..cdddb39ad81b --- /dev/null +++ b/integration-tests/__tests__/__snapshots__/find_related_files.test.js.snap @@ -0,0 +1,54 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`--findRelatedTests flag generates coverage report for filename 1`] = ` +"Test Suites: 2 passed, 2 total +Tests: 2 passed, 2 total +Snapshots: 0 total +Time: <> +Ran all test suites. +" +`; + +exports[`--findRelatedTests flag generates coverage report for filename 2`] = ` +" + +PASS __tests__/a.test.js +PASS __tests__/b.test.js" +`; + +exports[`--findRelatedTests flag generates coverage report for filename 3`] = ` +"----------|----------|----------|----------|----------|-------------------| +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | +----------|----------|----------|----------|----------|-------------------| +All files | 100 | 100 | 100 | 100 | | + a.js | 100 | 100 | 100 | 100 | | + b.js | 100 | 100 | 100 | 100 | | +----------|----------|----------|----------|----------|-------------------| +" +`; + +exports[`--findRelatedTests flag generates coverage report for filename 4`] = ` +"Test Suites: 1 passed, 1 total +Tests: 1 passed, 1 total +Snapshots: 0 total +Time: <> +Ran all test suites related to files matching /a.js/i. +" +`; + +exports[`--findRelatedTests flag generates coverage report for filename 5`] = ` +"PASS __tests__/a.test.js + ✓ a + +" +`; + +exports[`--findRelatedTests flag generates coverage report for filename 6`] = ` +"----------|----------|----------|----------|----------|-------------------| +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | +----------|----------|----------|----------|----------|-------------------| +All files | 100 | 100 | 100 | 100 | | + a.js | 100 | 100 | 100 | 100 | | +----------|----------|----------|----------|----------|-------------------| +" +`; diff --git a/integration-tests/__tests__/find_related_files.test.js b/integration-tests/__tests__/find_related_files.test.js index 18a25d08ef86..ffa924d257ff 100644 --- a/integration-tests/__tests__/find_related_files.test.js +++ b/integration-tests/__tests__/find_related_files.test.js @@ -13,7 +13,7 @@ import runJest from '../runJest'; import os from 'os'; import path from 'path'; -const {cleanup, writeFiles} = require('../Utils'); +const {cleanup, writeFiles, extractSummary} = require('../Utils'); const SkipOnWindows = require('../../scripts/SkipOnWindows'); const DIR = path.resolve(os.tmpdir(), 'find_related_tests_test'); @@ -23,23 +23,74 @@ SkipOnWindows.suite(); beforeEach(() => cleanup(DIR)); afterEach(() => cleanup(DIR)); -test('runs tests related to filename', () => { - writeFiles(DIR, { - '.watchmanconfig': '', - '__tests__/test.test.js': ` +describe('--findRelatedTests flag', () => { + test('runs tests related to filename', () => { + writeFiles(DIR, { + '.watchmanconfig': '', + '__tests__/test.test.js': ` const a = require('../a'); test('a', () => {}); `, - 'a.js': 'module.exports = {};', - 'package.json': JSON.stringify({jest: {testEnvironment: 'node'}}), + 'a.js': 'module.exports = {};', + 'package.json': JSON.stringify({jest: {testEnvironment: 'node'}}), + }); + + const {stdout} = runJest(DIR, ['a.js']); + expect(stdout).toMatch(''); + + const {stderr} = runJest(DIR, ['--findRelatedTests', 'a.js']); + expect(stderr).toMatch('PASS __tests__/test.test.js'); + + const summaryMsg = 'Ran all test suites related to files matching /a.js/i.'; + expect(stderr).toMatch(summaryMsg); }); - const {stdout} = runJest(DIR, ['a.js']); - expect(stdout).toMatch(''); + test('generates coverage report for filename', () => { + writeFiles(DIR, { + '.watchmanconfig': '', + '__tests__/a.test.js': ` + require('../a'); + require('../b'); + test('a', () => expect(1).toBe(1)); + `, + '__tests__/b.test.js': ` + require('../b'); + test('b', () => expect(1).toBe(1)); + `, + 'a.js': 'module.exports = {}', + 'b.js': 'module.exports = {}', + 'package.json': JSON.stringify({ + jest: {collectCoverage: true, testEnvironment: 'node'}, + }), + }); + + let stdout; + let stderr; - const {stderr} = runJest(DIR, ['--findRelatedTests', 'a.js']); - expect(stderr).toMatch('PASS __tests__/test.test.js'); + ({stdout, stderr} = runJest(DIR)); + let summary; + let rest; + ({summary, rest} = extractSummary(stderr)); + expect(summary).toMatchSnapshot(); + expect( + rest + .split('\n') + .map(s => s.trim()) + .sort() + .join('\n'), + ).toMatchSnapshot(); - const summaryMsg = 'Ran all test suites related to files matching /a.js/i.'; - expect(stderr).toMatch(summaryMsg); + // both a.js and b.js should be in the coverage + expect(stdout).toMatchSnapshot(); + + ({stdout, stderr} = runJest(DIR, ['--findRelatedTests', 'a.js'])); + + ({summary, rest} = extractSummary(stderr)); + + expect(summary).toMatchSnapshot(); + // should only run a.js + expect(rest).toMatchSnapshot(); + // coverage should be collected only for a.js + expect(stdout).toMatchSnapshot(); + }); }); diff --git a/integration-tests/__tests__/only_changed.test.js b/integration-tests/__tests__/only_changed.test.js index 16ff3e633b7a..ed51ea3bd13a 100644 --- a/integration-tests/__tests__/only_changed.test.js +++ b/integration-tests/__tests__/only_changed.test.js @@ -73,6 +73,51 @@ test('run only changed files', () => { expect(stderr).toMatch(/PASS __tests__(\/|\\)file3.test.js/); }); +test('report test coverage for only changed files', () => { + writeFiles(DIR, { + '__tests__/a.test.js': ` + require('../a'); + require('../b'); + test('a', () => expect(1).toBe(1)); + `, + '__tests__/b.test.js': ` + require('../b'); + test('b', () => expect(1).toBe(1)); + `, + 'a.js': 'module.exports = {}', + 'b.js': 'module.exports = {}', + 'package.json': JSON.stringify({ + jest: { + collectCoverage: true, + coverageReporters: ['text'], + testEnvironment: 'node', + }, + }), + }); + + run(`${GIT} init`, DIR); + run(`${GIT} add .`, DIR); + run(`${GIT} commit -m "first"`, DIR); + + writeFiles(DIR, { + 'a.js': 'module.exports = {modified: true}', + }); + + let stdout; + + ({stdout} = runJest(DIR)); + + // both a.js and b.js should be in the coverage + expect(stdout).toMatch('a.js'); + expect(stdout).toMatch('b.js'); + + ({stdout} = runJest(DIR, ['-o'])); + + // coverage should be collected only for a.js + expect(stdout).toMatch('a.js'); + expect(stdout).not.toMatch('b.js'); +}); + test('onlyChanged in config is overwritten by --all or testPathPattern', () => { writeFiles(DIR, { '.watchmanconfig': '', diff --git a/packages/jest-cli/src/__tests__/run_jest_with_coverage.test.js b/packages/jest-cli/src/__tests__/run_jest_with_coverage.test.js new file mode 100644 index 000000000000..9df75caec40d --- /dev/null +++ b/packages/jest-cli/src/__tests__/run_jest_with_coverage.test.js @@ -0,0 +1,112 @@ +import runJest from '../run_jest'; + +jest.mock('jest-util'); + +jest.mock( + '../test_scheduler', + () => + class { + constructor(globalConfig) { + this._globalConfig = globalConfig; + } + + scheduleTests() { + return {_globalConfig: this._globalConfig}; + } + }, +); + +jest.mock( + '../test_sequencer', + () => + class { + sort(allTests) { + return allTests; + } + cacheResults() {} + }, +); + +jest.mock( + '../search_source', + () => + class { + constructor(context) { + this._context = context; + } + + async getTestPaths(globalConfig, changedFilesPromise) { + const {files} = await changedFilesPromise; + const paths = files.filter(path => path.match(/__tests__/)); + + return { + collectCoverageFrom: files.filter(path => !path.match(/__tests__/)), + tests: paths.map(path => ({ + context: this._context, + duration: null, + path, + })), + }; + } + }, +); + +const config = {roots: [], testPathIgnorePatterns: [], testRegex: ''}; +let globalConfig; +const defaults = { + changedFilesPromise: Promise.resolve({ + files: ['foo.js', '__tests__/foo-test.js', 'dont/cover.js'], + }), + contexts: [{config}], + onComplete: runResults => (globalConfig = runResults._globalConfig), + outputStream: {}, + startRun: {}, + testWatcher: {isInterrupted: () => false}, +}; + +describe('collectCoverageFrom patterns', () => { + it('should apply collectCoverageFrom patterns coming from SearchSource', async () => { + expect.assertions(1); + + await runJest( + Object.assign({}, defaults, { + globalConfig: { + rootDir: '', + }, + }), + ); + expect(globalConfig.collectCoverageFrom).toEqual([ + 'foo.js', + 'dont/cover.js', + ]); + }); + + it('excludes coverage from files outside the global collectCoverageFrom config', async () => { + expect.assertions(1); + + await runJest( + Object.assign({}, defaults, { + globalConfig: { + collectCoverageFrom: ['**/dont/*.js'], + rootDir: '', + }, + }), + ); + expect(globalConfig.collectCoverageFrom).toEqual(['dont/cover.js']); + }); + + it('respects coveragePathIgnorePatterns', async () => { + expect.assertions(1); + + await runJest( + Object.assign({}, defaults, { + globalConfig: { + collectCoverageFrom: ['**/*.js'], + coveragePathIgnorePatterns: ['dont'], + rootDir: '', + }, + }), + ); + expect(globalConfig.collectCoverageFrom).toEqual(['foo.js']); + }); +}); diff --git a/packages/jest-cli/src/run_jest.js b/packages/jest-cli/src/run_jest.js index f11bbf010ca3..f4bd499ddbff 100644 --- a/packages/jest-cli/src/run_jest.js +++ b/packages/jest-cli/src/run_jest.js @@ -13,6 +13,7 @@ import type {GlobalConfig} from 'types/Config'; import type {AggregatedResult} from 'types/TestResult'; import type TestWatcher from './test_watcher'; +import micromatch from 'micromatch'; import chalk from 'chalk'; import path from 'path'; import {Console, formatTestResults} from 'jest-util'; @@ -131,6 +132,8 @@ export default (async function runJest({ } } + let collectCoverageFrom = []; + const testRunData = await Promise.all( contexts.map(async context => { const matches = await getTestPaths( @@ -141,10 +144,44 @@ export default (async function runJest({ jestHooks, ); allTests = allTests.concat(matches.tests); + + if (matches.collectCoverageFrom) { + collectCoverageFrom = collectCoverageFrom.concat( + matches.collectCoverageFrom.filter(filename => { + if ( + globalConfig.collectCoverageFrom && + !micromatch( + [path.relative(globalConfig.rootDir, filename)], + globalConfig.collectCoverageFrom, + ).length + ) { + return false; + } + + if ( + globalConfig.coveragePathIgnorePatterns && + globalConfig.coveragePathIgnorePatterns.some(pattern => + filename.match(pattern), + ) + ) { + return false; + } + + return true; + }), + ); + } + return {context, matches}; }), ); + if (collectCoverageFrom.length) { + globalConfig = Object.freeze( + Object.assign({}, globalConfig, {collectCoverageFrom}), + ); + } + allTests = sequencer.sort(allTests); if (globalConfig.listTests) { diff --git a/packages/jest-cli/src/search_source.js b/packages/jest-cli/src/search_source.js index 1b5c7e06039b..e574c8e5fc48 100644 --- a/packages/jest-cli/src/search_source.js +++ b/packages/jest-cli/src/search_source.js @@ -17,10 +17,12 @@ import micromatch from 'micromatch'; import DependencyResolver from 'jest-resolve-dependencies'; import testPathPatternToRegExp from './test_path_pattern_to_regexp'; import {escapePathForRegex} from 'jest-regex-util'; +import {replaceRootDirInPath} from 'jest-config'; type SearchResult = {| noSCM?: boolean, stats?: {[key: string]: number}, + collectCoverageFrom?: Array, tests: Array, total?: number, |}; @@ -140,23 +142,38 @@ export default class SearchSource { return this._getAllTestPaths(testPathPattern); } - findRelatedTests(allPaths: Set): SearchResult { + findRelatedTests( + allPaths: Set, + collectCoverage: boolean, + ): SearchResult { const dependencyResolver = new DependencyResolver( this._context.resolver, this._context.hasteFS, ); - return { - tests: toTests( - this._context, - dependencyResolver.resolveInverse( - allPaths, - this.isTestFilePath.bind(this), - { - skipNodeResolution: this._context.config.skipNodeResolution, - }, - ), + + const tests = toTests( + this._context, + dependencyResolver.resolveInverse( + allPaths, + this.isTestFilePath.bind(this), + { + skipNodeResolution: this._context.config.skipNodeResolution, + }, ), - }; + ); + let collectCoverageFrom; + + // If we are collecting coverage, also return collectCoverageFrom patterns + if (collectCoverage) { + collectCoverageFrom = Array.from(allPaths).map(filename => { + filename = replaceRootDirInPath(this._context.config.rootDir, filename); + return path.isAbsolute(filename) + ? path.relative(this._context.config.rootDir, filename) + : filename; + }); + } + + return {collectCoverageFrom, tests}; } findTestsByPaths(paths: Array): SearchResult { @@ -170,24 +187,27 @@ export default class SearchSource { }; } - findRelatedTestsFromPattern(paths: Array): SearchResult { + findRelatedTestsFromPattern( + paths: Array, + collectCoverage: boolean, + ): SearchResult { if (Array.isArray(paths) && paths.length) { const resolvedPaths = paths.map(p => path.resolve(process.cwd(), p)); - return this.findRelatedTests(new Set(resolvedPaths)); + return this.findRelatedTests(new Set(resolvedPaths), collectCoverage); } return {tests: []}; } async findTestRelatedToChangedFiles( changedFilesPromise: ChangedFilesPromise, + collectCoverage: boolean, ) { const {repos, changedFiles} = await changedFilesPromise; - // no SCM (git/hg/...) is found in any of the roots. const noSCM = Object.keys(repos).every(scm => repos[scm].size === 0); return noSCM ? {noSCM: true, tests: []} - : this.findRelatedTests(changedFiles); + : this.findRelatedTests(changedFiles, collectCoverage); } async getTestPaths( @@ -200,11 +220,16 @@ export default class SearchSource { throw new Error('This promise must be present when running with -o.'); } - return this.findTestRelatedToChangedFiles(changedFilesPromise); + return this.findTestRelatedToChangedFiles( + changedFilesPromise, + globalConfig.collectCoverage, + ); } else if (globalConfig.runTestsByPath && paths && paths.length) { return Promise.resolve(this.findTestsByPaths(paths)); } else if (globalConfig.findRelatedTests && paths && paths.length) { - return Promise.resolve(this.findRelatedTestsFromPattern(paths)); + return Promise.resolve( + this.findRelatedTestsFromPattern(paths, globalConfig.collectCoverage), + ); } else if (globalConfig.testPathPattern != null) { return Promise.resolve( this.findMatchingTests(globalConfig.testPathPattern), diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 0eeb2fed1791..94003c410899 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -211,6 +211,31 @@ describe('collectCoverageFrom', () => { }); }); +describe('findRelatedTests', () => { + it('it generates --coverageCoverageFrom patterns when needed', () => { + const sourceFile = 'file1.js'; + + const {options} = normalize( + { + collectCoverage: true, + rootDir: '/root/path/foo/', + }, + { + _: [ + `/root/path/${sourceFile}`, + sourceFile, + `/bar/${sourceFile}`, + ], + findRelatedTests: true, + }, + ); + + const expected = [`../${sourceFile}`, `${sourceFile}`, `bar/${sourceFile}`]; + + expect(options.collectCoverageFrom).toEqual(expected); + }); +}); + function testPathArray(key) { it('normalizes all paths relative to rootDir', () => { const {options} = normalize( diff --git a/packages/jest-config/src/index.js b/packages/jest-config/src/index.js index 62b469cc580c..88afaedfb6c4 100644 --- a/packages/jest-config/src/index.js +++ b/packages/jest-config/src/index.js @@ -24,6 +24,7 @@ import readConfigFileAndSetRootDir from './read_config_file_and_set_root_dir'; export {getTestEnvironment, isJSONString} from './utils'; export {default as normalize} from './normalize'; export {default as deprecationEntries} from './deprecated'; +export {replaceRootDirInPath} from './utils'; export function readConfig( argv: Argv, diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 7e0827c67fc2..b53185643f3f 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -23,7 +23,7 @@ import {replacePathSepForRegex} from 'jest-regex-util'; import { BULLET, DOCUMENTATION_NOTE, - _replaceRootDirInPath, + replaceRootDirInPath, _replaceRootDirTags, escapeGlobCharacters, getTestEnvironment, @@ -66,7 +66,7 @@ const setupPreset = ( optionsPreset: string, ): InitialOptions => { let preset; - const presetPath = _replaceRootDirInPath(options.rootDir, optionsPreset); + const presetPath = replaceRootDirInPath(options.rootDir, optionsPreset); const presetModule = Resolver.findNodeModule( presetPath.endsWith(JSON_EXTENSION) ? presetPath @@ -146,7 +146,7 @@ const normalizeCollectCoverageOnlyFrom = ( return collectCoverageOnlyFrom.reduce((map, filePath) => { filePath = path.resolve( options.rootDir, - _replaceRootDirInPath(options.rootDir, filePath), + replaceRootDirInPath(options.rootDir, filePath), ); map[filePath] = true; return map; @@ -271,7 +271,7 @@ const normalizeReporters = (options: InitialOptions, basedir) => { [reporterConfig, {}] : reporterConfig; - const reporterPath = _replaceRootDirInPath( + const reporterPath = replaceRootDirInPath( options.rootDir, normalizedReporterConfig[0], ); @@ -391,7 +391,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { options[key].map(filePath => path.resolve( options.rootDir, - _replaceRootDirInPath(options.rootDir, filePath), + replaceRootDirInPath(options.rootDir, filePath), ), ); break; @@ -404,7 +404,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { options[key] && path.resolve( options.rootDir, - _replaceRootDirInPath(options.rootDir, options[key]), + replaceRootDirInPath(options.rootDir, options[key]), ); break; case 'globalSetup': @@ -449,7 +449,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { value.hasteImplModulePath = resolve( options.rootDir, 'haste.hasteImplModulePath', - _replaceRootDirInPath(options.rootDir, value.hasteImplModulePath), + replaceRootDirInPath(options.rootDir, value.hasteImplModulePath), ); } break; @@ -599,6 +599,21 @@ export default function normalize(options: InitialOptions, argv: Argv) { ); } + // If collectCoverage is enabled while using --findRelatedTests we need to + // avoid having false negatives in the generated coverage report. + // The following: `--findRelatedTests '/rootDir/file1.js' --coverage` + // Is transformed to: `--findRelatedTests '/rootDir/file1.js' --coverage --collectCoverageFrom 'file1.js'` + // where arguments to `--collectCoverageFrom` should be globs (or relative + // paths to the rootDir) + if (newOptions.collectCoverage && argv.findRelatedTests) { + newOptions.collectCoverageFrom = argv._.map(filename => { + filename = replaceRootDirInPath(options.rootDir, filename); + return path.isAbsolute(filename) + ? path.relative(options.rootDir, filename) + : filename; + }); + } + return { hasDeprecationWarnings, options: newOptions, diff --git a/packages/jest-config/src/utils.js b/packages/jest-config/src/utils.js index 8831b25c0233..c85998edbfe4 100644 --- a/packages/jest-config/src/utils.js +++ b/packages/jest-config/src/utils.js @@ -30,7 +30,7 @@ const createValidationError = (message: string) => { export const resolve = (rootDir: string, key: string, filePath: Path) => { const module = Resolver.findNodeModule( - _replaceRootDirInPath(rootDir, filePath), + replaceRootDirInPath(rootDir, filePath), { basedir: rootDir, }, @@ -52,7 +52,7 @@ export const escapeGlobCharacters = (path: Path): Glob => { return path.replace(/([()*{}\[\]!?\\])/g, '\\$1'); }; -export const _replaceRootDirInPath = ( +export const replaceRootDirInPath = ( rootDir: string, filePath: Path, ): string => { @@ -91,7 +91,7 @@ export const _replaceRootDirTags = (rootDir: string, config: any) => { } return _replaceRootDirInObject(rootDir, config); case 'string': - return _replaceRootDirInPath(rootDir, config); + return replaceRootDirInPath(rootDir, config); } return config; }; @@ -105,7 +105,7 @@ export const _replaceRootDirTags = (rootDir: string, config: any) => { * 1. looks for relative to Jest. */ export const getTestEnvironment = (config: Object) => { - const env = _replaceRootDirInPath(config.rootDir, config.testEnvironment); + const env = replaceRootDirInPath(config.rootDir, config.testEnvironment); let module = Resolver.findNodeModule(`jest-environment-${env}`, { basedir: config.rootDir, }); From cf199ba32bb9e5fc274aea623edbfdb365da2864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jim=C3=A9nez=20Es=C3=BAn?= Date: Thu, 22 Mar 2018 13:58:25 +0000 Subject: [PATCH 26/37] Implement SHA-1 support in jest-haste-map (#5834) --- .../src/__tests__/index.test.js | 204 +++++++++++++++--- packages/jest-haste-map/src/constants.js | 1 + .../src/crawlers/__tests__/node.test.js | 20 +- .../src/crawlers/__tests__/watchman.test.js | 126 ++++++++++- packages/jest-haste-map/src/crawlers/node.js | 4 +- .../jest-haste-map/src/crawlers/watchman.js | 29 ++- packages/jest-haste-map/src/index.js | 34 ++- packages/jest-haste-map/src/types.js | 9 +- packages/jest-haste-map/src/worker.js | 33 ++- types/HasteMap.js | 1 + 10 files changed, 381 insertions(+), 80 deletions(-) diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index 546bb8c06d8d..5920d0ae7905 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -8,6 +8,15 @@ 'use strict'; +const crypto = require('crypto'); + +function mockHashContents(contents) { + return crypto + .createHash('sha1') + .update(contents) + .digest('hex'); +} + jest.mock('child_process', () => ({ // If this does not throw, we'll use the (mocked) watchman crawler execSync() {}, @@ -28,14 +37,17 @@ jest.mock('jest-worker', () => { jest.mock('../crawlers/node'); jest.mock('../crawlers/watchman', () => jest.fn(options => { - const {data, ignore, roots} = options; + const {data, ignore, roots, computeSha1} = options; + const list = mockChangedFiles || mockFs; + data.clocks = mockClocks; - const list = mockChangedFiles || mockFs; for (const file in list) { if (new RegExp(roots.join('|')).test(file) && !ignore(file)) { if (list[file]) { - data.files[file] = ['', 32, 0, []]; + const hash = computeSha1 ? mockHashContents(list[file]) : null; + + data.files[file] = ['', 32, 0, [], hash]; } else { delete data.files[file]; } @@ -265,15 +277,27 @@ describe('HasteMap', () => { expect(data.clocks).toEqual(mockClocks); expect(data.files).toEqual({ - '/fruits/__mocks__/Pear.js': ['', 32, 1, ['Melon']], - '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry']], + '/fruits/__mocks__/Pear.js': ['', 32, 1, ['Melon'], null], + '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry'], null], // node modules - '/fruits/node_modules/fbjs/lib/flatMap.js': ['flatMap', 32, 1, []], - '/fruits/node_modules/react/react.js': ['React', 32, 1, ['Component']], - - '/fruits/pear.js': ['Pear', 32, 1, ['Banana', 'Strawberry']], - '/fruits/strawberry.js': ['Strawberry', 32, 1, []], - '/vegetables/melon.js': ['Melon', 32, 1, []], + '/fruits/node_modules/fbjs/lib/flatMap.js': [ + 'flatMap', + 32, + 1, + [], + null, + ], + '/fruits/node_modules/react/react.js': [ + 'React', + 32, + 1, + ['Component'], + null, + ], + + '/fruits/pear.js': ['Pear', 32, 1, ['Banana', 'Strawberry'], null], + '/fruits/strawberry.js': ['Strawberry', 32, 1, [], null], + '/vegetables/melon.js': ['Melon', 32, 1, [], null], }); expect(data.map).toEqual({ @@ -301,12 +325,85 @@ describe('HasteMap', () => { Pear: '/fruits/__mocks__/Pear.js', }); - // The cache file must exactly mirror the data structure returned - // from a build. + // The cache file must exactly mirror the data structure returned from a + // build. expect(hasteMap.read()).toEqual(data); }); }); + describe('builds a haste map on a fresh cache with SHA-1s', () => { + [false, true].forEach(useWatchman => { + it('uses watchman: ' + useWatchman, async () => { + const node = require('../crawlers/node'); + + node.mockImplementation(options => { + const {data} = options; + + // The node crawler returns "null" for the SHA-1. + data.files = object({ + '/fruits/__mocks__/Pear.js': ['', 32, 0, ['Melon'], null], + '/fruits/banana.js': ['Banana', 32, 0, ['Strawberry'], null], + '/fruits/pear.js': ['Pear', 32, 0, ['Banana', 'Strawberry'], null], + '/fruits/strawberry.js': ['Strawberry', 32, 0, [], null], + '/vegetables/melon.js': ['Melon', 32, 0, [], null], + }); + + return Promise.resolve(data); + }); + + const hasteMap = new HasteMap( + Object.assign({}, defaultConfig, { + computeSha1: true, + maxWorkers: 1, + useWatchman, + }), + ); + + const data = (await hasteMap.build()).__hasteMapForTest; + + expect(data.files).toEqual({ + '/fruits/__mocks__/Pear.js': [ + '', + 32, + 1, + ['Melon'], + 'a315b7804be2b124b77c1f107205397f45226964', + ], + '/fruits/banana.js': [ + 'Banana', + 32, + 1, + ['Strawberry'], + 'f24c6984cce6f032f6d55d771d04ab8dbbe63c8c', + ], + '/fruits/pear.js': [ + 'Pear', + 32, + 1, + ['Banana', 'Strawberry'], + '211a8ff1e67007b204727d26943c15cf9fd00031', + ], + '/fruits/strawberry.js': [ + 'Strawberry', + 32, + 1, + [], + 'd55d545ad7d997cb2aa10fb412e0cc287d4fbfb3', + ], + '/vegetables/melon.js': [ + 'Melon', + 32, + 1, + [], + '45c5d30e29313187829dfd5a16db81c3143fbcc7', + ], + }); + + expect(hasteMap.read()).toEqual(data); + }); + }); + }); + it('does not crawl native files even if requested to do so', async () => { mockFs['/video/i-require-a-video.js'] = [ '/**', @@ -351,6 +448,7 @@ describe('HasteMap', () => { 32, 0, [], + null, ]); expect(data.map.fbjs).not.toBeDefined(); @@ -452,9 +550,16 @@ describe('HasteMap', () => { 32, 1, ['Blackberry'], + null, + ], + '/fruits/strawberry.ios.js': [ + 'Strawberry', + 32, + 1, + ['Raspberry'], + null, ], - '/fruits/strawberry.ios.js': ['Strawberry', 32, 1, ['Raspberry']], - '/fruits/strawberry.js': ['Strawberry', 32, 1, ['Banana']], + '/fruits/strawberry.js': ['Strawberry', 32, 1, ['Banana'], null], }); expect(data.map).toEqual({ @@ -539,7 +644,7 @@ describe('HasteMap', () => { expect(data.clocks).toEqual(mockClocks); const files = object(initialData.files); - files['/fruits/banana.js'] = ['Kiwi', 32, 1, ['Raspberry']]; + files['/fruits/banana.js'] = ['Kiwi', 32, 1, ['Raspberry'], null]; expect(data.files).toEqual(files); @@ -800,11 +905,41 @@ describe('HasteMap', () => { expect(mockWorker.mock.calls.length).toBe(5); expect(mockWorker.mock.calls).toEqual([ - [{filePath: '/fruits/__mocks__/Pear.js'}], - [{filePath: '/fruits/banana.js'}], - [{filePath: '/fruits/pear.js'}], - [{filePath: '/fruits/strawberry.js'}], - [{filePath: '/vegetables/melon.js'}], + [ + { + computeSha1: false, + filePath: '/fruits/__mocks__/Pear.js', + hasteImplModulePath: undefined, + }, + ], + [ + { + computeSha1: false, + filePath: '/fruits/banana.js', + hasteImplModulePath: undefined, + }, + ], + [ + { + computeSha1: false, + filePath: '/fruits/pear.js', + hasteImplModulePath: undefined, + }, + ], + [ + { + computeSha1: false, + filePath: '/fruits/strawberry.js', + hasteImplModulePath: undefined, + }, + ], + [ + { + computeSha1: false, + filePath: '/vegetables/melon.js', + hasteImplModulePath: undefined, + }, + ], ]); expect(mockEnd).toBeCalled(); @@ -821,7 +956,7 @@ describe('HasteMap', () => { node.mockImplementation(options => { const {data} = options; data.files = object({ - '/fruits/banana.js': ['', 32, 0, []], + '/fruits/banana.js': ['', 32, 0, [], null], }); return Promise.resolve(data); }); @@ -833,7 +968,7 @@ describe('HasteMap', () => { expect(node).toBeCalled(); expect(data.files).toEqual({ - '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry']], + '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry'], null], }); expect(console.warn.mock.calls[0][0]).toMatchSnapshot(); @@ -850,7 +985,7 @@ describe('HasteMap', () => { node.mockImplementation(options => { const {data} = options; data.files = object({ - '/fruits/banana.js': ['', 32, 0, []], + '/fruits/banana.js': ['', 32, 0, [], null], }); return Promise.resolve(data); }); @@ -862,7 +997,7 @@ describe('HasteMap', () => { expect(node).toBeCalled(); expect(data.files).toEqual({ - '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry']], + '/fruits/banana.js': ['Banana', 32, 1, ['Strawberry'], null], }); }); }); @@ -1022,14 +1157,17 @@ describe('HasteMap', () => { }, { mockFs: { - '/fruits/Orange.android.js': `/** - * @providesModule Orange - */ -`, - '/fruits/Orange.ios.js': `/** -* @providesModule Orange -*/ -`, + '/fruits/Orange.android.js': [ + '/**', + ' * @providesModule Orange', + ' */', + ].join('\n'), + + '/fruits/Orange.ios.js': [ + '/**', + ' * @providesModule Orange', + ' */', + ].join('\n'), }, }, ); diff --git a/packages/jest-haste-map/src/constants.js b/packages/jest-haste-map/src/constants.js index 3acca06d4ddd..38be492df15b 100644 --- a/packages/jest-haste-map/src/constants.js +++ b/packages/jest-haste-map/src/constants.js @@ -22,6 +22,7 @@ export default { MTIME: 1, VISITED: 2, DEPENDENCIES: 3, + SHA1: 4, /* module map attributes */ PATH: 0, diff --git a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js index e61ad415bf51..c7af076c4ba3 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js @@ -125,9 +125,9 @@ describe('node crawler', () => { expect(data.files).not.toBe(null); expect(data.files).toEqual({ - '/fruits/strawberry.js': ['', 32, 0, []], - '/fruits/tomato.js': ['', 33, 0, []], - '/vegetables/melon.json': ['', 34, 0, []], + '/fruits/strawberry.js': ['', 32, 0, [], null], + '/fruits/tomato.js': ['', 33, 0, [], null], + '/vegetables/melon.json': ['', 34, 0, [], null], }); }); @@ -142,8 +142,8 @@ describe('node crawler', () => { const files = Object.create(null); // In this test sample, strawberry is changed and tomato is unchanged - const tomato = ['', 33, 1, []]; - files['/fruits/strawberry.js'] = ['', 30, 1, []]; + const tomato = ['', 33, 1, [], null]; + files['/fruits/strawberry.js'] = ['', 30, 1, [], null]; files['/fruits/tomato.js'] = tomato; return nodeCrawl({ @@ -153,7 +153,7 @@ describe('node crawler', () => { roots: ['/fruits'], }).then(data => { expect(data.files).toEqual({ - '/fruits/strawberry.js': ['', 32, 0, []], + '/fruits/strawberry.js': ['', 32, 0, [], null], '/fruits/tomato.js': tomato, }); @@ -175,8 +175,8 @@ describe('node crawler', () => { roots: ['/fruits'], }).then(data => { expect(data.files).toEqual({ - '/fruits/directory/strawberry.js': ['', 33, 0, []], - '/fruits/tomato.js': ['', 32, 0, []], + '/fruits/directory/strawberry.js': ['', 33, 0, [], null], + '/fruits/tomato.js': ['', 32, 0, [], null], }); }); }); @@ -195,8 +195,8 @@ describe('node crawler', () => { roots: ['/fruits'], }).then(data => { expect(data.files).toEqual({ - '/fruits/directory/strawberry.js': ['', 33, 0, []], - '/fruits/tomato.js': ['', 32, 0, []], + '/fruits/directory/strawberry.js': ['', 33, 0, [], null], + '/fruits/tomato.js': ['', 32, 0, [], null], }); }); }); diff --git a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js index 9b52c70e21d9..57d5eb138254 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js @@ -15,7 +15,8 @@ jest.mock('fb-watchman', () => { const Client = jest.fn(); Client.prototype.command = jest.fn((args, callback) => setImmediate(() => { - const response = mockResponse[args[0]][normalizePathSep(args[1])]; + const path = args[1] ? normalizePathSep(args[1]) : undefined; + const response = mockResponse[args[0]][path]; callback(null, response.next ? response.next().value : response); }), ); @@ -59,6 +60,11 @@ describe('watchman watch', () => { watchman = require('fb-watchman'); mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, query: { [ROOT_MOCK]: { clock: 'c:fake-clock:1', @@ -92,9 +98,9 @@ describe('watchman watch', () => { }; mockFiles = Object.assign(Object.create(null), { - [MELON]: ['', 33, 0, []], - [STRAWBERRY]: ['', 30, 0, []], - [TOMATO]: ['', 31, 0, []], + [MELON]: ['', 33, 0, [], null], + [STRAWBERRY]: ['', 30, 0, [], null], + [TOMATO]: ['', 31, 0, [], null], }); }); @@ -149,6 +155,11 @@ describe('watchman watch', () => { test('updates the file object when the clock is given', () => { mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, query: { [ROOT_MOCK]: { clock: 'c:fake-clock:2', @@ -192,15 +203,20 @@ describe('watchman watch', () => { }); expect(data.files).toEqual({ - [KIWI]: ['', 42, 0, []], - [MELON]: ['', 33, 0, []], - [STRAWBERRY]: ['', 30, 0, []], + [KIWI]: ['', 42, 0, [], null], + [MELON]: ['', 33, 0, [], null], + [STRAWBERRY]: ['', 30, 0, [], null], }); }); }); test('resets the file object when watchman is restarted', () => { mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, query: { [ROOT_MOCK]: { clock: 'c:fake-clock:3', @@ -228,7 +244,7 @@ describe('watchman watch', () => { 'watch-project': WATCH_PROJECT_MOCK, }; - const mockMetadata = ['Banana', 41, 1, ['Raspberry']]; + const mockMetadata = ['Banana', 41, 1, ['Raspberry'], null]; mockFiles[BANANA] = mockMetadata; const clocks = Object.assign(Object.create(null), { @@ -254,7 +270,7 @@ describe('watchman watch', () => { // /fruits/strawberry.js was removed from the file list. expect(data.files).toEqual({ [BANANA]: mockMetadata, - [KIWI]: ['', 42, 0, []], + [KIWI]: ['', 42, 0, [], null], [TOMATO]: mockFiles[TOMATO], }); @@ -268,6 +284,11 @@ describe('watchman watch', () => { test('properly resets the file map when only one watcher is reset', () => { mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, query: { [FRUITS]: { clock: 'c:fake-clock:3', @@ -324,14 +345,19 @@ describe('watchman watch', () => { }); expect(data.files).toEqual({ - [KIWI]: ['', 42, 0, []], - [MELON]: ['', 33, 0, []], + [KIWI]: ['', 42, 0, [], null], + [MELON]: ['', 33, 0, [], null], }); }); }); test('does not add directory filters to query when watching a ROOT', () => { mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, query: { [ROOT_MOCK]: { clock: 'c:fake-clock:1', @@ -398,4 +424,82 @@ describe('watchman watch', () => { expect(client.end).toBeCalled(); }); }); + + test('SHA-1 requested and available', async () => { + mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, + query: { + [ROOT_MOCK]: { + clock: 'c:fake-clock:1', + files: [], + is_fresh_instance: false, + version: '4.5.0', + }, + }, + 'watch-project': { + [ROOT_MOCK]: { + watch: forcePOSIXPaths(ROOT_MOCK), + }, + }, + }; + + await watchmanCrawl({ + computeSha1: true, + data: { + clocks: Object.create(null), + files: Object.create(null), + }, + extensions: ['js', 'json'], + roots: [ROOT_MOCK], + }); + + const client = watchman.Client.mock.instances[0]; + const calls = client.command.mock.calls; + + expect(calls[0][0]).toEqual(['list-capabilities']); + expect(calls[2][0][2].fields).toContain('content.sha1hex'); + }); + + test('SHA-1 requested and NOT available', async () => { + mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: [], + }, + }, + query: { + [ROOT_MOCK]: { + clock: 'c:fake-clock:1', + files: [], + is_fresh_instance: false, + version: '4.5.0', + }, + }, + 'watch-project': { + [ROOT_MOCK]: { + watch: forcePOSIXPaths(ROOT_MOCK), + }, + }, + }; + + await watchmanCrawl({ + computeSha1: true, + data: { + clocks: Object.create(null), + files: Object.create(null), + }, + extensions: ['js', 'json'], + roots: [ROOT_MOCK], + }); + + const client = watchman.Client.mock.instances[0]; + const calls = client.command.mock.calls; + + expect(calls[0][0]).toEqual(['list-capabilities']); + expect(calls[2][0][2].fields).not.toContain('content.sha1hex'); + }); }); diff --git a/packages/jest-haste-map/src/crawlers/node.js b/packages/jest-haste-map/src/crawlers/node.js index 1b7d20e5bd9c..17ce3452e757 100644 --- a/packages/jest-haste-map/src/crawlers/node.js +++ b/packages/jest-haste-map/src/crawlers/node.js @@ -136,8 +136,8 @@ module.exports = function nodeCrawl( if (existingFile && existingFile[H.MTIME] === mtime) { files[name] = existingFile; } else { - // See ../constants.js - files[name] = ['', mtime, 0, []]; + // See ../constants.js; SHA-1 will always be null and fulfilled later. + files[name] = ['', mtime, 0, [], null]; } }); data.files = files; diff --git a/packages/jest-haste-map/src/crawlers/watchman.js b/packages/jest-haste-map/src/crawlers/watchman.js index ed14bf213774..7a706689e089 100644 --- a/packages/jest-haste-map/src/crawlers/watchman.js +++ b/packages/jest-haste-map/src/crawlers/watchman.js @@ -28,6 +28,7 @@ function WatchmanError(error: Error): Error { module.exports = async function watchmanCrawl( options: CrawlerOptions, ): Promise { + const fields = ['name', 'exists', 'mtime_ms']; const {data, extensions, ignore, roots} = options; const defaultWatchExpression = [ 'allof', @@ -35,8 +36,8 @@ module.exports = async function watchmanCrawl( ['anyof'].concat(extensions.map(extension => ['suffix', extension])), ]; const clocks = data.clocks; - const client = new watchman.Client(); + let clientError; client.on('error', error => (clientError = WatchmanError(error))); @@ -49,13 +50,22 @@ module.exports = async function watchmanCrawl( ), ); + if (options.computeSha1) { + const {capabilities} = await cmd('list-capabilities'); + + if (capabilities.indexOf('field-content.sha1hex') !== -1) { + fields.push('content.sha1hex'); + } + } + async function getWatchmanRoots(roots) { const watchmanRoots = new Map(); await Promise.all( roots.map(async root => { const response = await cmd('watch-project', root); const existing = watchmanRoots.get(response.watch); - // A root can only be filtered if it was never seen with a relative_path before + // A root can only be filtered if it was never seen with a + // relative_path before. const canBeFiltered = !existing || existing.length > 0; if (canBeFiltered) { @@ -65,8 +75,9 @@ module.exports = async function watchmanCrawl( (existing || []).concat(response.relative_path), ); } else { - // Make the filter directories an empty array to signal that this root - // was already seen and needs to be watched for all files/directories + // Make the filter directories an empty array to signal that this + // root was already seen and needs to be watched for all files or + // directories. watchmanRoots.set(response.watch, []); } } @@ -88,7 +99,6 @@ module.exports = async function watchmanCrawl( ...directoryFilters.map(dir => ['dirname', dir]), ]); } - const fields = ['name', 'exists', 'mtime_ms']; const query = clocks[root] ? // Use the `since` generator if we have a clock available @@ -97,9 +107,11 @@ module.exports = async function watchmanCrawl( {expression, fields, suffix: extensions}; const response = await cmd('query', root, query); + if ('warning' in response) { console.warn('watchman warning: ', response.warning); } + isFresh = isFresh || response.is_fresh_instance; files.set(root, response); }, @@ -117,10 +129,13 @@ module.exports = async function watchmanCrawl( try { const watchmanRoots = await getWatchmanRoots(roots); const watchmanFileResults = await queryWatchmanForDirs(watchmanRoots); - // Reset the file map if watchman was restarted and sends us a list of files. + + // Reset the file map if watchman was restarted and sends us a list of + // files. if (watchmanFileResults.isFresh) { files = Object.create(null); } + watchmanFiles = watchmanFileResults.files; } finally { client.end(); @@ -148,7 +163,7 @@ module.exports = async function watchmanCrawl( files[name] = existingFileData; } else { // See ../constants.js - files[name] = ['', mtime, 0, []]; + files[name] = ['', mtime, 0, [], fileData['content.sha1hex'] || null]; } } } diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 86c79cc6bd01..3edd60d64c7c 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -46,6 +46,7 @@ import typeof HType from './constants'; type Options = { cacheDirectory?: string, + computeSha1?: boolean, console?: Console, extensions: Array, forceNodeFilesystemAPI?: boolean, @@ -66,6 +67,7 @@ type Options = { type InternalOptions = { cacheDirectory: string, + computeSha1: boolean, extensions: Array, forceNodeFilesystemAPI: boolean, hasteImplModulePath?: string, @@ -157,6 +159,7 @@ const getWhiteList = (list: ?Array): ?RegExp => { * mtime: number, // check for outdated files. * visited: boolean, // whether the file has been parsed or not. * dependencies: Array, // all relative dependencies of this file. + * sha1: ?string, // SHA-1 of the file, if requested via options. * }; * * // Modules can be targeted to a specific platform based on the file name. @@ -178,6 +181,7 @@ const getWhiteList = (list: ?Array): ?RegExp => { * * The HasteMap is created as follows: * 1. read data from the cache or create an empty structure. + * * 2. crawl the file system. * * empty cache: crawl the entire file system. * * cache available: @@ -185,12 +189,14 @@ const getWhiteList = (list: ?Array): ?RegExp => { * * if watchman is unavailable: crawl the entire file system. * * build metadata objects for every file. This builds the `files` part of * the `HasteMap`. + * * 3. parse and extract metadata from changed files. * * this is done in parallel over worker processes to improve performance. * * the worst case is to parse all files. * * the best case is no file system access and retrieving all data from * the cache. - * * the average case is a small number of changed files. + * * the average case is a small number of changed files. + * * 4. serialize the new `HasteMap` in a cache file. * Worker processes can directly access the cache through `HasteMap.read()`. * @@ -209,6 +215,7 @@ class HasteMap extends EventEmitter { super(); this._options = { cacheDirectory: options.cacheDirectory || os.tmpdir(), + computeSha1: options.computeSha1 || false, extensions: options.extensions, forceNodeFilesystemAPI: !!options.forceNodeFilesystemAPI, hasteImplModulePath: options.hasteImplModulePath, @@ -240,6 +247,7 @@ class HasteMap extends EventEmitter { this._options.roots.join(':'), this._options.extensions.join(':'), this._options.platforms.join(':'), + this._options.computeSha1.toString(), options.mocksPattern || '', options.ignorePattern.toString(), ); @@ -429,27 +437,35 @@ class HasteMap extends EventEmitter { const fileMetadata = hasteMap.files[filePath]; const moduleMetadata = hasteMap.map[fileMetadata[H.ID]]; + const computeSha1 = this._options.computeSha1 && !fileMetadata[H.SHA1]; + if (fileMetadata[H.VISITED]) { if (!fileMetadata[H.ID]) { return null; } + if (moduleMetadata != null) { const platform = getPlatformExtension(filePath, this._options.platforms) || H.GENERIC_PLATFORM; + const module = moduleMetadata[platform]; + if (module == null) { return null; } + const modulesByPlatform = map[fileMetadata[H.ID]] || (map[fileMetadata[H.ID]] = {}); modulesByPlatform[platform] = module; + return null; } } return this._getWorker(workerOptions) .worker({ + computeSha1, filePath, hasteImplModulePath: this._options.hasteImplModulePath, }) @@ -457,13 +473,20 @@ class HasteMap extends EventEmitter { metadata => { // `1` for truthy values instead of `true` to save cache space. fileMetadata[H.VISITED] = 1; + const metadataId = metadata.id; const metadataModule = metadata.module; + if (metadataId && metadataModule) { fileMetadata[H.ID] = metadataId; setModule(metadataId, metadataModule); } + fileMetadata[H.DEPENDENCIES] = metadata.dependencies || []; + + if (computeSha1) { + fileMetadata[H.SHA1] = metadata.sha1; + } }, error => { if (typeof error !== 'object' || !error.message || !error.stack) { @@ -498,6 +521,7 @@ class HasteMap extends EventEmitter { } for (const filePath in hasteMap.files) { + // SHA-1, if requested, should already be present thanks to the crawler. const promise = this._processFile(hasteMap, map, mocks, filePath); if (promise) { promises.push(promise); @@ -572,6 +596,7 @@ class HasteMap extends EventEmitter { error, ); return nodeCrawl({ + computeSha1: options.computeSha1, data: hasteMap, extensions: options.extensions, forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, @@ -591,6 +616,7 @@ class HasteMap extends EventEmitter { try { return crawl({ + computeSha1: options.computeSha1, data: hasteMap, extensions: options.extensions, forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, @@ -746,16 +772,14 @@ class HasteMap extends EventEmitter { // If the file was added or changed, // parse it and update the haste map. if (type === 'add' || type === 'change') { - const fileMetadata = ['', stat.mtime.getTime(), 0, []]; + const fileMetadata = ['', stat.mtime.getTime(), 0, [], null]; hasteMap.files[filePath] = fileMetadata; const promise = this._processFile( hasteMap, hasteMap.map, hasteMap.mocks, filePath, - { - forceInBand: true, - }, + {forceInBand: true}, ); // Cleanup this._cleanup(); diff --git a/packages/jest-haste-map/src/types.js b/packages/jest-haste-map/src/types.js index f379805d1ee3..aaedde6a83e7 100644 --- a/packages/jest-haste-map/src/types.js +++ b/packages/jest-haste-map/src/types.js @@ -12,17 +12,20 @@ import type {InternalHasteMap, ModuleMetaData} from 'types/HasteMap'; export type IgnoreMatcher = (item: string) => boolean; export type WorkerMessage = { + computeSha1: boolean, filePath: string, hasteImplModulePath?: string, }; -export type WorkerMetadata = { +export type WorkerMetadata = {| + dependencies: ?Array, id: ?string, module: ?ModuleMetaData, - dependencies: ?Array, -}; + sha1: ?string, +|}; export type CrawlerOptions = {| + computeSha1: boolean, data: InternalHasteMap, extensions: Array, forceNodeFilesystemAPI: boolean, diff --git a/packages/jest-haste-map/src/worker.js b/packages/jest-haste-map/src/worker.js index c35365a15836..969e384dbbc2 100644 --- a/packages/jest-haste-map/src/worker.js +++ b/packages/jest-haste-map/src/worker.js @@ -9,6 +9,7 @@ import type {HasteImpl, WorkerMessage, WorkerMetadata} from './types'; +import crypto from 'crypto'; import path from 'path'; import * as docblock from 'jest-docblock'; import fs from 'graceful-fs'; @@ -35,23 +36,25 @@ export async function worker(data: WorkerMessage): Promise { } const filePath = data.filePath; - let module; - let id: ?string; + let content; let dependencies; + let id; + let module; + let sha1; + // Process a package.json that is returned as a PACKAGE type with its name. if (filePath.endsWith(PACKAGE_JSON)) { - const fileData = JSON.parse(fs.readFileSync(filePath, 'utf8')); + content = fs.readFileSync(filePath, 'utf8'); + const fileData = JSON.parse(content); if (fileData.name) { id = fileData.name; module = [filePath, H.PACKAGE]; } - return {dependencies, id, module}; - } - - if (!blacklist.has(filePath.substr(filePath.lastIndexOf('.')))) { - const content = fs.readFileSync(filePath, 'utf8'); + // Process a randome file that is returned as a MODULE. + } else if (!blacklist.has(filePath.substr(filePath.lastIndexOf('.')))) { + content = fs.readFileSync(filePath, 'utf8'); if (hasteImpl) { id = hasteImpl.getHasteName(filePath); @@ -67,5 +70,17 @@ export async function worker(data: WorkerMessage): Promise { } } - return {dependencies, id, module}; + // If a SHA-1 is requested on update, compute it. + if (data.computeSha1) { + if (content == null) { + content = fs.readFileSync(filePath); + } + + sha1 = crypto + .createHash('sha1') + .update(content) + .digest('hex'); + } + + return {dependencies, id, module, sha1}; } diff --git a/types/HasteMap.js b/types/HasteMap.js index 24f496a4c889..bc985254807b 100644 --- a/types/HasteMap.js +++ b/types/HasteMap.js @@ -53,6 +53,7 @@ export type FileMetaData = [ /* mtime */ number, /* visited */ 0 | 1, /* dependencies */ Array, + /* sha1 */ ?string, ]; type ModuleMapItem = {[platform: string]: ModuleMetaData}; From dab57e315d364f48d6a9f82eb23f07b9cf553ebd Mon Sep 17 00:00:00 2001 From: Gustavo Bastos Date: Thu, 22 Mar 2018 15:02:36 +0100 Subject: [PATCH 27/37] Improve output format for mismatchedArgs in mock/spy calls (#5846) --- CHANGELOG.md | 2 + .../__snapshots__/spy_matchers.test.js.snap | 224 +++++++++++++++--- packages/expect/src/spy_matchers.js | 8 +- 3 files changed, 200 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81183359d5a7..4e7d7572a09b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Features +* `[expect]` Improve output format for mismatchedArgs in mock/spy calls. + ([#5846](https://github.com/facebook/jest/pull/5846)) * `[jest-cli]` Add support for using `--coverage` in combination with watch mode, `--onlyChanged`, `--findRelatedTests` and more ([#5601](https://github.com/facebook/jest/pull/5601)) diff --git a/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap index 650e63d8826f..8487cb972281 100644 --- a/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap @@ -34,7 +34,21 @@ exports[`lastCalledWith works with Map 2`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} as argument 1, but it was called with Map {1 => 2, 2 => 1}." + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. + +Difference: + +- Expected ++ Received + + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" `; exports[`lastCalledWith works with Set 1`] = ` @@ -48,14 +62,30 @@ exports[`lastCalledWith works with Set 2`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - Set {3, 4} as argument 1, but it was called with Set {1, 2}." + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. + +Difference: + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" `; exports[`lastCalledWith works with arguments that don't match 1`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`lastCalledWith works with arguments that match 1`] = ` @@ -97,28 +127,36 @@ exports[`lastCalledWith works with many arguments that don't match 1`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`lastCalledWith works with many arguments that don't match 2`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`lastCalledWith works with many arguments that don't match 3`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`lastCalledWith works with many arguments that don't match 4`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`lastCalledWith works with trailing undefined arguments 1`] = ` @@ -254,7 +292,21 @@ exports[`nthCalledWith works with Map 2`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: - Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} as argument 1, but it was called with Map {1 => 2, 2 => 1}." + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. + +Difference: + +- Expected ++ Received + + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" `; exports[`nthCalledWith works with Set 1`] = ` @@ -268,14 +320,30 @@ exports[`nthCalledWith works with Set 2`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: - Set {3, 4} as argument 1, but it was called with Set {1, 2}." + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. + +Difference: + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" `; exports[`nthCalledWith works with arguments that don't match 1`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`nthCalledWith works with arguments that match 1`] = ` @@ -466,7 +534,21 @@ exports[`toHaveBeenCalledWith works with Map 2`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} as argument 1, but it was called with Map {1 => 2, 2 => 1}." + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. + +Difference: + +- Expected ++ Received + + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" `; exports[`toHaveBeenCalledWith works with Set 1`] = ` @@ -480,14 +562,30 @@ exports[`toHaveBeenCalledWith works with Set 2`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - Set {3, 4} as argument 1, but it was called with Set {1, 2}." + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. + +Difference: + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" `; exports[`toHaveBeenCalledWith works with arguments that don't match 1`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenCalledWith works with arguments that match 1`] = ` @@ -529,44 +627,68 @@ exports[`toHaveBeenCalledWith works with many arguments that don't match 1`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\". - \\"bar\\" as argument 2, but it was called with \\"bar2\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar2\\". - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenCalledWith works with many arguments that don't match 2`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\". - \\"bar\\" as argument 2, but it was called with \\"bar2\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar2\\". - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenCalledWith works with many arguments that don't match 3`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\". - \\"bar\\" as argument 2, but it was called with \\"bar2\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar2\\". - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenCalledWith works with many arguments that don't match 4`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) Expected mock function to have been called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\". - \\"bar\\" as argument 2, but it was called with \\"bar2\\". + \\"bar\\" +as argument 2, but it was called with + \\"bar2\\". - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenCalledWith works with trailing undefined arguments 1`] = ` @@ -610,7 +732,21 @@ exports[`toHaveBeenLastCalledWith works with Map 2`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} as argument 1, but it was called with Map {1 => 2, 2 => 1}." + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. + +Difference: + +- Expected ++ Received + + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" `; exports[`toHaveBeenLastCalledWith works with Set 1`] = ` @@ -624,14 +760,30 @@ exports[`toHaveBeenLastCalledWith works with Set 2`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - Set {3, 4} as argument 1, but it was called with Set {1, 2}." + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. + +Difference: + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" `; exports[`toHaveBeenLastCalledWith works with arguments that don't match 1`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar1\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." `; exports[`toHaveBeenLastCalledWith works with arguments that match 1`] = ` @@ -673,28 +825,36 @@ exports[`toHaveBeenLastCalledWith works with many arguments that don't match 1`] "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`toHaveBeenLastCalledWith works with many arguments that don't match 2`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`toHaveBeenLastCalledWith works with many arguments that don't match 3`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`toHaveBeenLastCalledWith works with many arguments that don't match 4`] = ` "expect(jest.fn()).toHaveBeenLastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" as argument 2, but it was called with \\"bar3\\"." + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; exports[`toHaveBeenLastCalledWith works with trailing undefined arguments 1`] = ` diff --git a/packages/expect/src/spy_matchers.js b/packages/expect/src/spy_matchers.js index 962febe48ac5..f3fc7d817e67 100644 --- a/packages/expect/src/spy_matchers.js +++ b/packages/expect/src/spy_matchers.js @@ -24,6 +24,7 @@ import { } from 'jest-matcher-utils'; import {equals} from './jasmine_utils'; import {iterableEquality, partition} from './utils'; +import diff from 'jest-diff'; const createToBeCalledMatcher = matcherName => (received, expected) => { ensureNoExpected(expected, matcherName); @@ -268,9 +269,12 @@ const formatMismatchedArgs = (expected, received) => { const printedArgs = []; for (let i = 0; i < length; i++) { if (!equals(expected[i], received[i], [iterableEquality])) { + const diffString = diff(expected[i], received[i]); printedArgs.push( - ` ${printExpected(expected[i])} as argument ${i + 1}, ` + - `but it was called with ${printReceived(received[i])}.`, + ` ${printExpected(expected[i])}\n` + + `as argument ${i + 1}, but it was called with\n` + + ` ${printReceived(received[i])}.` + + (diffString ? `\n\nDifference:\n\n${diffString}` : ''), ); } else if (i >= expected.length) { printedArgs.push( From 69c11a0c8192e643f4aa4c0aa79ce09cdd1ab155 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 22 Mar 2018 17:15:26 +0100 Subject: [PATCH 28/37] Run prettier on output in build dirs (#5858) --- CHANGELOG.md | 4 +++- .../__tests__/__snapshots__/failures.test.js.snap | 2 +- .../__tests__/__snapshots__/globals.test.js.snap | 4 ++-- scripts/build.js | 6 +++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e7d7572a09b..d7b5520066a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,8 +64,10 @@ ### Chore & Maintenance +* `[#5858]` Run Prettier on compiled output + ([#5858](https://github.com/facebook/jest/pull/3497)) * `[#5708]` Add fileChange hook for plugins - ([#5648](https://github.com/facebook/jest/pull/5708)) + ([#5708](https://github.com/facebook/jest/pull/5708)) * `[docs]` Add docs on using `jest.mock(...)` ([#5648](https://github.com/facebook/jest/pull/5648)) * `[docs]` Mention Jest Puppeteer Preset diff --git a/integration-tests/__tests__/__snapshots__/failures.test.js.snap b/integration-tests/__tests__/__snapshots__/failures.test.js.snap index b773dd6645e9..ccde240d4d88 100644 --- a/integration-tests/__tests__/__snapshots__/failures.test.js.snap +++ b/integration-tests/__tests__/__snapshots__/failures.test.js.snap @@ -116,7 +116,7 @@ exports[`works with async failures 1`] = ` + \\"foo\\": \\"bar\\", } - at packages/expect/build/index.js:104:76 + at packages/expect/build/index.js:160:61 " `; diff --git a/integration-tests/__tests__/__snapshots__/globals.test.js.snap b/integration-tests/__tests__/__snapshots__/globals.test.js.snap index 280ee77d5556..b3aac3749d67 100644 --- a/integration-tests/__tests__/__snapshots__/globals.test.js.snap +++ b/integration-tests/__tests__/__snapshots__/globals.test.js.snap @@ -32,7 +32,7 @@ exports[`cannot test with no implementation 1`] = ` 4 | test('test, no implementation'); 5 | - at packages/jest-jasmine2/build/jasmine/Env.js:390:15 + at packages/jest-jasmine2/build/jasmine/Env.js:405:15 at __tests__/only-constructs.test.js:3:5 " @@ -59,7 +59,7 @@ exports[`cannot test with no implementation with expand arg 1`] = ` 4 | test('test, no implementation'); 5 | - at packages/jest-jasmine2/build/jasmine/Env.js:390:15 + at packages/jest-jasmine2/build/jasmine/Env.js:405:15 at __tests__/only-constructs.test.js:3:5 " diff --git a/scripts/build.js b/scripts/build.js index fbc9d05cb783..d687b794def5 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -28,6 +28,7 @@ const mkdirp = require('mkdirp'); const babel = require('babel-core'); const chalk = require('chalk'); const micromatch = require('micromatch'); +const prettier = require('prettier'); const stringLength = require('string-length'); const getPackages = require('./getPackages'); const browserBuild = require('./browserBuild'); @@ -46,6 +47,8 @@ const transformOptions = JSON.parse( fs.readFileSync(path.resolve(__dirname, '..', '.babelrc'), 'utf8') ); transformOptions.babelrc = false; +const prettierConfig = prettier.resolveConfig.sync(__filename); +prettierConfig.trailingComma = 'none'; const adjustToTerminalWidth = str => { const columns = process.stdout.columns || 80; @@ -161,7 +164,8 @@ function buildFile(file, silent) { } const transformed = babel.transformFileSync(file, options).code; - fs.writeFileSync(destPath, transformed); + const prettyCode = prettier.format(transformed, prettierConfig); + fs.writeFileSync(destPath, prettyCode); silent || process.stdout.write( chalk.green(' \u2022 ') + From 1a487c1803124c594bdd86ee24b5949025660bc3 Mon Sep 17 00:00:00 2001 From: Ran Yitzhaki Date: Fri, 23 Mar 2018 03:11:35 +0300 Subject: [PATCH 29/37] Assign process.env.JEST_WORKER_ID=1 when in runInBand mode (#5860) --- CHANGELOG.md | 2 ++ .../src/__tests__/test_runner.test.js | 19 +++++++++++++++++++ packages/jest-runner/src/index.js | 1 + 3 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b5520066a1..016da2e36835 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,8 @@ ### Fixes +* `[jest-runner]` Assign `process.env.JEST_WORKER_ID="1"` when in runInBand mode + ([#5860](https://github.com/facebook/jest/pull/5860)) * `[jest-cli]` Add descriptive error message when trying to use `globalSetup`/`globalTeardown` file that doesn't export a function. ([#5835](https://github.com/facebook/jest/pull/5835)) diff --git a/packages/jest-runner/src/__tests__/test_runner.test.js b/packages/jest-runner/src/__tests__/test_runner.test.js index f05ab6c6dc4d..ced1c934a8cc 100644 --- a/packages/jest-runner/src/__tests__/test_runner.test.js +++ b/packages/jest-runner/src/__tests__/test_runner.test.js @@ -86,3 +86,22 @@ test('does not inject the rawModuleMap in serial mode', () => { ]); }); }); + +test('assign process.env.JEST_WORKER_ID = 1 when in runInBand mode', () => { + const globalConfig = {maxWorkers: 1, watch: false}; + const config = {rootDir: '/path/'}; + const context = {config}; + + return new TestRunner(globalConfig) + .runTests( + [{context, path: './file.test.js'}], + new TestWatcher({isWatchMode: globalConfig.watch}), + () => {}, + () => {}, + () => {}, + {serial: true}, + ) + .then(() => { + expect(process.env.JEST_WORKER_ID).toBe('1'); + }); +}); diff --git a/packages/jest-runner/src/index.js b/packages/jest-runner/src/index.js index f4a2ce92c1ab..2f4dd7243697 100644 --- a/packages/jest-runner/src/index.js +++ b/packages/jest-runner/src/index.js @@ -61,6 +61,7 @@ class TestRunner { onResult: OnTestSuccess, onFailure: OnTestFailure, ) { + process.env.JEST_WORKER_ID = '1'; const mutex = throat(1); return tests.reduce( (promise, test) => From fbbfd52004187fa68279d0015ece9d4001863e25 Mon Sep 17 00:00:00 2001 From: Orta Date: Sun, 25 Mar 2018 21:14:59 -0400 Subject: [PATCH 30/37] Improve the english on visual difference message (#5868) --- .../src/__tests__/__snapshots__/matchers.test.js.snap | 6 +++--- packages/jest-matcher-utils/src/index.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index 1a759e202655..cc7fc3b606e9 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -290,7 +290,7 @@ Received: [] Difference: -Compared values have no visual difference. Looks like you wanted to test for object/array equality with strict \`toBe\` matcher. You probably need to use \`toEqual\` instead." +Compared values have no visual difference. Looks like you wanted to test for object/array equality with the stricter \`toBe\` matcher. You probably need to use \`toEqual\` instead." `; exports[`.toBe() fails for: {"a": 1} and {"a": 1} 1`] = ` @@ -301,7 +301,7 @@ Received: {\\"a\\": 1} Difference: -Compared values have no visual difference. Looks like you wanted to test for object/array equality with strict \`toBe\` matcher. You probably need to use \`toEqual\` instead." +Compared values have no visual difference. Looks like you wanted to test for object/array equality with the stricter \`toBe\` matcher. You probably need to use \`toEqual\` instead." `; exports[`.toBe() fails for: {"a": 1} and {"a": 5} 1`] = ` @@ -329,7 +329,7 @@ Received: {} Difference: -Compared values have no visual difference. Looks like you wanted to test for object/array equality with strict \`toBe\` matcher. You probably need to use \`toEqual\` instead." +Compared values have no visual difference. Looks like you wanted to test for object/array equality with the stricter \`toBe\` matcher. You probably need to use \`toEqual\` instead." `; exports[`.toBe() fails for: -0 and 0 1`] = ` diff --git a/packages/jest-matcher-utils/src/index.js b/packages/jest-matcher-utils/src/index.js index f5df6c90901c..557dd9cba5ca 100644 --- a/packages/jest-matcher-utils/src/index.js +++ b/packages/jest-matcher-utils/src/index.js @@ -49,7 +49,7 @@ const NUMBERS = [ ]; export const SUGGEST_TO_EQUAL = chalk.dim( - 'Looks like you wanted to test for object/array equality with strict `toBe` matcher. You probably need to use `toEqual` instead.', + 'Looks like you wanted to test for object/array equality with the stricter `toBe` matcher. You probably need to use `toEqual` instead.', ); export const stringify = (object: any, maxDepth?: number = 10): string => { From 2bd5dfddfef425348760807d12348829a9a82d30 Mon Sep 17 00:00:00 2001 From: suchipi Date: Sun, 25 Mar 2018 23:24:18 -0600 Subject: [PATCH 31/37] Create basic readme for expect package (#5870) * Create basic readme for expect package * prettier --- packages/expect/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/expect/README.md diff --git a/packages/expect/README.md b/packages/expect/README.md new file mode 100644 index 000000000000..4db3e412c428 --- /dev/null +++ b/packages/expect/README.md @@ -0,0 +1,5 @@ +# expect + +This package exports the `expect` function used in +[Jest](https://facebook.github.io/jest/). You can find its documentation +[on Jest's website](https://facebook.github.io/jest/docs/en/expect.html). From 3c65b72d88744a24d1eb985f147707b5d1c532dd Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Mon, 26 Mar 2018 06:20:51 -0400 Subject: [PATCH 32/37] Interactive Snapshot Mode improvements (#5864) * Interactive Snapshot Mode updates * Update docs * Squash images * More squashing * Update snaps * Move arrow to a const * Add comment * Update GIF * Clarify cursorUp usage * Update snaps * Update CHANGELOG * Add AssertionLocation type --- CHANGELOG.md | 4 +- docs/SnapshotTesting.md | 9 +- .../snapshot_interactive_mode.test.js.snap | 298 ++++++++++++++- .../snapshot_interactive_mode.test.js | 345 ++++++++++++++---- packages/jest-cli/src/__tests__/watch.test.js | 22 +- packages/jest-cli/src/constants.js | 3 +- .../plugins/update_snapshots_interactive.js | 49 ++- .../jest-cli/src/snapshot_interactive_mode.js | 182 +++++++-- types/TestResult.js | 5 + .../img/content/interactiveSnapshot.png | Bin 31245 -> 131750 bytes .../img/content/interactiveSnapshotDone.png | Bin 0 -> 33880 bytes .../img/content/interactiveSnapshotUpdate.gif | Bin 217622 -> 825337 bytes 12 files changed, 780 insertions(+), 137 deletions(-) create mode 100644 website/static/img/content/interactiveSnapshotDone.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 016da2e36835..be3d9a539a64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,9 @@ ([#5605](https://github.com/facebook/jest/pull/5605)) * `[jest-cli]` Add `isSerial` property that runners can expose to specify that they can not run in parallel - [#5706](https://github.com/facebook/jest/pull/5706) + ([#5706](https://github.com/facebook/jest/pull/5706)) +* `[jest-cli]` Interactive Snapshot Mode improvements + ([#5864](https://github.com/facebook/jest/pull/5864)) ### Fixes diff --git a/docs/SnapshotTesting.md b/docs/SnapshotTesting.md index 1f01c626cc90..ca285458766b 100644 --- a/docs/SnapshotTesting.md +++ b/docs/SnapshotTesting.md @@ -128,13 +128,18 @@ Failed snapshots can also be updated interactively in watch mode: ![](/jest/img/content/interactiveSnapshot.png) Once you enter Interactive Snapshot Mode, Jest will step you through the failed -snapshots one test suite at a time and give you the opportunity to review the -failed output. +snapshots one test at a time and give you the opportunity to review the failed +output. From here you can choose to update that snapshot or skip to the next: ![](/jest/img/content/interactiveSnapshotUpdate.gif) +Once you're finished, Jest will give you a summary before returning back to +watch mode: + +![](/jest/img/content/interactiveSnapshotDone.png) + ### Tests Should Be Deterministic Your tests should be deterministic. That is, running the same tests multiple diff --git a/packages/jest-cli/src/__tests__/__snapshots__/snapshot_interactive_mode.test.js.snap b/packages/jest-cli/src/__tests__/__snapshots__/snapshot_interactive_mode.test.js.snap index fd47bf1ef31f..e842ea64375f 100644 --- a/packages/jest-cli/src/__tests__/__snapshots__/snapshot_interactive_mode.test.js.snap +++ b/packages/jest-cli/src/__tests__/__snapshots__/snapshot_interactive_mode.test.js.snap @@ -1,36 +1,308 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`SnapshotInteractiveMode updateWithResults last test success, trigger end of interactive mode 1`] = `"TEST RESULTS CONTENTS"`; +exports[`SnapshotInteractiveMode skip 1 test, then quit 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, then quit 2`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 1 snapshot reviewed, 1 snapshot skipped + +Watch Usage + › Press r to restart Interactive Snapshot Mode. + › Press q to quit Interactive Snapshot Mode. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, then restart 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, then restart 2`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 1 snapshot reviewed, 1 snapshot skipped + +Watch Usage + › Press r to restart Interactive Snapshot Mode. + › Press q to quit Interactive Snapshot Mode. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, then restart 3`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, update 1 test, then finish and restart 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 2 snapshots remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, update 1 test, then finish and restart 2`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining, 1 snapshot skipped + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, update 1 test, then finish and restart 3`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 2 snapshots reviewed, 1 snapshot updated, 1 snapshot skipped + +Watch Usage + › Press r to restart Interactive Snapshot Mode. + › Press q to quit Interactive Snapshot Mode. +" +`; + +exports[`SnapshotInteractiveMode skip 1 test, update 1 test, then finish and restart 4`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 2 tests, then finish and restart 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 2 snapshots remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 2 tests, then finish and restart 2`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining, 1 snapshot skipped + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode skip 2 tests, then finish and restart 3`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 2 snapshots reviewed, 2 snapshots skipped -exports[`SnapshotInteractiveMode updateWithResults overlay handle progress UI 1`] = ` -"TEST RESULTS CONTENTS -[MOCK - cursorUp] +Watch Usage + › Press r to restart Interactive Snapshot Mode. + › Press q to quit Interactive Snapshot Mode. +" +`; + +exports[`SnapshotInteractiveMode skip 2 tests, then finish and restart 4`] = ` +"[MOCK - cursorUp] [MOCK - eraseDown] Interactive Snapshot Progress - › 2 suites failed, 1 suite passed + › 2 snapshots remaining Watch Usage › Press u to update failing snapshots for this test. - › Press s to skip the current test suite. - › Press q to quit Interactive Snapshot Update Mode. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. › Press Enter to trigger a test run. " `; -exports[`SnapshotInteractiveMode updateWithResults with a test failure simply update UI 1`] = ` -"TEST RESULTS CONTENTS -[MOCK - cursorUp] +exports[`SnapshotInteractiveMode update 1 test, skip 1 test, then finish and restart 1`] = ` +"[MOCK - cursorUp] [MOCK - eraseDown] Interactive Snapshot Progress - › 1 suite failed + › 2 snapshots remaining Watch Usage › Press u to update failing snapshots for this test. - › Press q to quit Interactive Snapshot Update Mode. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. › Press Enter to trigger a test run. " `; -exports[`SnapshotInteractiveMode updateWithResults with a test success, call the next test 1`] = `"TEST RESULTS CONTENTS"`; +exports[`SnapshotInteractiveMode update 1 test, skip 1 test, then finish and restart 2`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining, 1 snapshot updated + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode update 1 test, skip 1 test, then finish and restart 3`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 2 snapshots reviewed, 1 snapshot updated, 1 snapshot skipped + +Watch Usage + › Press r to restart Interactive Snapshot Mode. + › Press q to quit Interactive Snapshot Mode. +" +`; + +exports[`SnapshotInteractiveMode update 1 test, skip 1 test, then finish and restart 4`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode update 1 test, then finish and return 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode update 1 test, then finish and return 2`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 1 snapshot reviewed, 1 snapshot updated + +Watch Usage + › Press Enter to return to watch mode. +" +`; + +exports[`SnapshotInteractiveMode update 2 tests, then finish and return 1`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 2 snapshots remaining + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode update 2 tests, then finish and return 2`] = ` +"[MOCK - cursorUp] +[MOCK - eraseDown] + +Interactive Snapshot Progress + › 1 snapshot remaining, 1 snapshot updated + +Watch Usage + › Press u to update failing snapshots for this test. + › Press s to skip the current test. + › Press q to quit Interactive Snapshot Mode. + › Press Enter to trigger a test run. +" +`; + +exports[`SnapshotInteractiveMode update 2 tests, then finish and return 3`] = ` +"[MOCK - eraseDown] + +Interactive Snapshot Result + › 2 snapshots reviewed, 2 snapshots updated + +Watch Usage + › Press Enter to return to watch mode. +" +`; diff --git a/packages/jest-cli/src/__tests__/snapshot_interactive_mode.test.js b/packages/jest-cli/src/__tests__/snapshot_interactive_mode.test.js index 638bb8c3e7a8..26fd83792a9f 100644 --- a/packages/jest-cli/src/__tests__/snapshot_interactive_mode.test.js +++ b/packages/jest-cli/src/__tests__/snapshot_interactive_mode.test.js @@ -17,6 +17,7 @@ jest.mock('../lib/terminal_utils', () => ({ })); jest.mock('ansi-escapes', () => ({ + clearScreen: '[MOCK - eraseDown]', cursorRestorePosition: '[MOCK - cursorRestorePosition]', cursorSavePosition: '[MOCK - cursorSavePosition]', cursorScrollDown: '[MOCK - cursorScrollDown]', @@ -34,10 +35,13 @@ jest.doMock('chalk', () => describe('SnapshotInteractiveMode', () => { let pipe; let instance; - + let mockCallback; beforeEach(() => { pipe = {write: jest.fn()}; instance = new SnapshotInteractiveMode(pipe); + mockCallback = jest.fn(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); }); test('is inactive at construction', () => { @@ -45,98 +49,293 @@ describe('SnapshotInteractiveMode', () => { }); test('call to run process the first file', () => { - const mockCallback = jest.fn(); - instance.run(['first.js', 'second.js'], mockCallback); + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'second.js', title: 'test two'}, + ]; + instance.run(assertions, mockCallback); expect(instance.isActive()).toBeTruthy(); - expect(mockCallback).toBeCalledWith('first.js', false); + expect(mockCallback).toBeCalledWith(assertions[0], false); }); test('call to abort', () => { - const mockCallback = jest.fn(); - instance.run(['first.js', 'second.js'], mockCallback); + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'second.js', title: 'test two'}, + ]; + instance.run(assertions, mockCallback); expect(instance.isActive()).toBeTruthy(); instance.abort(); expect(instance.isActive()).toBeFalsy(); - expect(mockCallback).toBeCalledWith('', false); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).toBeCalledWith(null, false); }); - describe('key press handler', () => { - test('call to skip trigger a processing of next file', () => { - const mockCallback = jest.fn(); - instance.run(['first.js', 'second.js'], mockCallback); - expect(mockCallback.mock.calls[0]).toEqual(['first.js', false]); - instance.put(KEYS.S); - expect(mockCallback.mock.calls[1]).toEqual(['second.js', false]); - instance.put(KEYS.S); - expect(mockCallback.mock.calls[2]).toEqual(['first.js', false]); - }); - - test('call to skip works with 1 file', () => { - const mockCallback = jest.fn(); - instance.run(['first.js'], mockCallback); - expect(mockCallback.mock.calls[0]).toEqual(['first.js', false]); - instance.put(KEYS.S); - expect(mockCallback.mock.calls[1]).toEqual(['first.js', false]); - }); - - test('press U trigger a snapshot update call', () => { - const mockCallback = jest.fn(); - instance.run(['first.js'], mockCallback); - expect(mockCallback.mock.calls[0]).toEqual(['first.js', false]); - instance.put(KEYS.U); - expect(mockCallback.mock.calls[1]).toEqual(['first.js', true]); - }); - - test('press Q or ESC triggers an abort', () => { - instance.abort = jest.fn(); - instance.put(KEYS.Q); - instance.put(KEYS.ESCAPE); - expect(instance.abort).toHaveBeenCalledTimes(2); - }); - - test('press ENTER trigger a run', () => { - const mockCallback = jest.fn(); - instance.run(['first.js'], mockCallback); - instance.put(KEYS.ENTER); - expect(mockCallback).toHaveBeenCalledTimes(2); - expect(mockCallback).toHaveBeenCalledWith('first.js', false); - }); + + test('call to reset', () => { + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'second.js', title: 'test two'}, + ]; + instance.run(assertions, mockCallback); + expect(instance.isActive()).toBeTruthy(); + instance.restart(); + expect(instance.isActive()).toBeTruthy(); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).toBeCalledWith(assertions[0], false); + }); + + test('press Q or ESC triggers an abort', () => { + instance.abort = jest.fn(); + instance.put(KEYS.Q); + instance.put(KEYS.ESCAPE); + expect(instance.abort).toHaveBeenCalledTimes(2); }); - describe('updateWithResults', () => { - test('with a test failure simply update UI', () => { - const mockCallback = jest.fn(); - instance.run(['first.js'], mockCallback); - pipe.write('TEST RESULTS CONTENTS'); + + test('press ENTER trigger a run', () => { + const assertions = [{path: 'first.js', title: 'test one'}]; + instance.run(assertions, mockCallback); + instance.put(KEYS.ENTER); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(mockCallback).toHaveBeenCalledWith(assertions[0], false); + }); + + test('skip 1 test, then restart', () => { + const assertions = [{path: 'first.js', title: 'test one'}]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.R); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).nthCalledWith(2, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + }); + + test('skip 1 test, then quit', () => { + const assertions = [{path: 'first.js', title: 'test one'}]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.Q); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).nthCalledWith(2, null, false); + expect(mockCallback).toHaveBeenCalledTimes(2); + }); + + test('update 1 test, then finish and return', () => { + const mockCallback = jest.fn(); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: false}}); + }); + mockCallback.mockImplementationOnce(() => { instance.updateWithResults({snapshot: {failure: true}}); - expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); - expect(mockCallback).toHaveBeenCalledTimes(1); }); - test('with a test success, call the next test', () => { - const mockCallback = jest.fn(); - instance.run(['first.js', 'second.js'], mockCallback); - pipe.write('TEST RESULTS CONTENTS'); + const assertions = [{path: 'first.js', title: 'test one'}]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.U); + expect(mockCallback).nthCalledWith(2, assertions[0], true); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + + instance.put(KEYS.ENTER); + expect(instance.isActive()).toBe(false); + expect(mockCallback).nthCalledWith(3, null, false); + }); + + test('skip 2 tests, then finish and restart', () => { + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'first.js', title: 'test two'}, + ]; + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).nthCalledWith(2, assertions[1], false); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.R); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).nthCalledWith(3, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + }); + + test('update 2 tests, then finish and return', () => { + const mockCallback = jest.fn(); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: false}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { instance.updateWithResults({snapshot: {failure: false}}); - expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); - expect(mockCallback.mock.calls[1]).toEqual(['second.js', false]); }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'first.js', title: 'test two'}, + ]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.U); + expect(mockCallback).nthCalledWith(2, assertions[0], true); + expect(mockCallback).nthCalledWith(3, assertions[1], false); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.U); + expect(mockCallback).nthCalledWith(4, assertions[1], true); + expect(mockCallback).toHaveBeenCalledTimes(4); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); - test('overlay handle progress UI', () => { - const mockCallback = jest.fn(); - instance.run(['first.js', 'second.js', 'third.js'], mockCallback); - pipe.write('TEST RESULTS CONTENTS'); + instance.put(KEYS.ENTER); + expect(instance.isActive()).toBe(false); + expect(mockCallback).nthCalledWith(5, null, false); + expect(mockCallback).toHaveBeenCalledTimes(5); + }); + + test('update 1 test, skip 1 test, then finish and restart', () => { + const mockCallback = jest.fn(); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { instance.updateWithResults({snapshot: {failure: false}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { instance.updateWithResults({snapshot: {failure: true}}); - expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); }); - test('last test success, trigger end of interactive mode', () => { - const mockCallback = jest.fn(); - instance.abort = jest.fn(); - instance.run(['first.js'], mockCallback); - pipe.write('TEST RESULTS CONTENTS'); + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'first.js', title: 'test two'}, + ]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.U); + expect(mockCallback).nthCalledWith(2, assertions[0], true); + expect(mockCallback).nthCalledWith(3, assertions[1], false); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.R); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).nthCalledWith(4, assertions[1], false); + expect(mockCallback).toHaveBeenCalledTimes(4); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + }); + + test('skip 1 test, update 1 test, then finish and restart', () => { + const mockCallback = jest.fn(); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { instance.updateWithResults({snapshot: {failure: false}}); - expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); - expect(instance.abort).toHaveBeenCalled(); }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + mockCallback.mockImplementationOnce(() => { + instance.updateWithResults({snapshot: {failure: true}}); + }); + + const assertions = [ + {path: 'first.js', title: 'test one'}, + {path: 'first.js', title: 'test two'}, + ]; + + instance.run(assertions, mockCallback); + expect(mockCallback).nthCalledWith(1, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.S); + expect(mockCallback).nthCalledWith(2, assertions[1], false); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.U); + expect(mockCallback).nthCalledWith(3, assertions[1], true); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); + pipe.write.mockClear(); + + instance.put(KEYS.R); + expect(instance.getSkippedNum()).toBe(0); + expect(mockCallback).nthCalledWith(4, assertions[0], false); + expect(mockCallback).toHaveBeenCalledTimes(4); + expect(pipe.write.mock.calls.join('\n')).toMatchSnapshot(); }); }); diff --git a/packages/jest-cli/src/__tests__/watch.test.js b/packages/jest-cli/src/__tests__/watch.test.js index 1fcc111dfd7d..51ff4c97774a 100644 --- a/packages/jest-cli/src/__tests__/watch.test.js +++ b/packages/jest-cli/src/__tests__/watch.test.js @@ -245,8 +245,26 @@ describe('Watch mode flows', () => { jest.unmock('jest-util'); const util = require('jest-util'); util.isInteractive = true; - util.getFailedSnapshotTests = jest.fn(() => ['test.js']); - results = {snapshot: {failure: true}}; + results = { + numFailedTests: 1, + snapshot: { + failure: true, + }, + testPath: 'test.js', + testResults: [ + { + snapshot: { + unmatched: true, + }, + testResults: [ + { + status: 'failed', + title: 'test a', + }, + ], + }, + ], + }; const ci_watch = require('../watch').default; ci_watch( diff --git a/packages/jest-cli/src/constants.js b/packages/jest-cli/src/constants.js index b29941b351ef..0804d3922780 100644 --- a/packages/jest-cli/src/constants.js +++ b/packages/jest-cli/src/constants.js @@ -10,7 +10,7 @@ const isWindows = process.platform === 'win32'; export const CLEAR = isWindows ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'; - +export const ARROW = ' \u203A '; export const KEYS = { A: '61', ARROW_DOWN: '1b5b42', @@ -29,6 +29,7 @@ export const KEYS = { P: '70', Q: '71', QUESTION_MARK: '3f', + R: '72', S: '73', T: '74', U: '75', diff --git a/packages/jest-cli/src/plugins/update_snapshots_interactive.js b/packages/jest-cli/src/plugins/update_snapshots_interactive.js index 32be3ee4a114..97f995d9852d 100644 --- a/packages/jest-cli/src/plugins/update_snapshots_interactive.js +++ b/packages/jest-cli/src/plugins/update_snapshots_interactive.js @@ -8,26 +8,52 @@ */ import type {JestHookSubscriber} from '../jest_hooks'; import type {GlobalConfig} from 'types/Config'; +import type {AggregatedResult, AssertionLocation} from 'types/TestResult'; import BaseWatchPlugin from '../base_watch_plugin'; -import {getFailedSnapshotTests} from 'jest-util'; import SnapshotInteractiveMode from '../snapshot_interactive_mode'; class UpdateSnapshotInteractivePlugin extends BaseWatchPlugin { _snapshotInteractiveMode: SnapshotInteractiveMode; - _failedSnapshotTestPaths: Array<*>; + _failedSnapshotTestAssertions: Array; constructor(options: { stdin: stream$Readable | tty$ReadStream, stdout: stream$Writable | tty$WriteStream, }) { super(options); - this._failedSnapshotTestPaths = []; + this._failedSnapshotTestAssertions = []; this._snapshotInteractiveMode = new SnapshotInteractiveMode(this._stdout); } + getFailedSnapshotTestAssertions( + testResults: AggregatedResult, + ): Array { + const failedTestPaths = []; + if (testResults.numFailedTests === 0 || !testResults.testResults) { + return failedTestPaths; + } + + testResults.testResults.forEach(testResult => { + if (testResult.snapshot && testResult.snapshot.unmatched) { + testResult.testResults.forEach(result => { + if (result.status === 'failed') { + failedTestPaths.push({ + path: testResult.testFilePath, + title: result.title, + }); + } + }); + } + }); + + return failedTestPaths; + } + apply(hooks: JestHookSubscriber) { hooks.testRunComplete(results => { - this._failedSnapshotTestPaths = getFailedSnapshotTests(results); + this._failedSnapshotTestAssertions = this.getFailedSnapshotTestAssertions( + results, + ); if (this._snapshotInteractiveMode.isActive()) { this._snapshotInteractiveMode.updateWithResults(results); } @@ -41,15 +67,16 @@ class UpdateSnapshotInteractivePlugin extends BaseWatchPlugin { } run(globalConfig: GlobalConfig, updateConfigAndRun: Function): Promise { - if (this._failedSnapshotTestPaths.length) { + if (this._failedSnapshotTestAssertions.length) { return new Promise(res => { this._snapshotInteractiveMode.run( - this._failedSnapshotTestPaths, - (path: string, shouldUpdateSnapshot: boolean) => { + this._failedSnapshotTestAssertions, + (assertion: ?AssertionLocation, shouldUpdateSnapshot: boolean) => { updateConfigAndRun({ mode: 'watch', - testNamePattern: '', - testPathPattern: path, + testNamePattern: assertion ? `^${assertion.title}$` : '', + testPathPattern: assertion ? assertion.path : '', + updateSnapshot: shouldUpdateSnapshot ? 'all' : 'none', }); if (!this._snapshotInteractiveMode.isActive()) { @@ -65,8 +92,8 @@ class UpdateSnapshotInteractivePlugin extends BaseWatchPlugin { getUsageInfo(globalConfig: GlobalConfig) { if ( - this._failedSnapshotTestPaths && - this._failedSnapshotTestPaths.length > 0 + this._failedSnapshotTestAssertions && + this._failedSnapshotTestAssertions.length > 0 ) { return { key: 'i'.codePointAt(0), diff --git a/packages/jest-cli/src/snapshot_interactive_mode.js b/packages/jest-cli/src/snapshot_interactive_mode.js index fdd6f62121fc..a78336aa6d37 100644 --- a/packages/jest-cli/src/snapshot_interactive_mode.js +++ b/packages/jest-cli/src/snapshot_interactive_mode.js @@ -8,60 +8,78 @@ * @flow */ -import type {AggregatedResult} from 'types/TestResult'; +import type {AggregatedResult, AssertionLocation} from 'types/TestResult'; const chalk = require('chalk'); const ansiEscapes = require('ansi-escapes'); const {pluralize} = require('./reporters/utils'); -const {KEYS} = require('./constants'); +const {KEYS, ARROW} = require('./constants'); export default class SnapshotInteractiveMode { _pipe: stream$Writable | tty$WriteStream; _isActive: boolean; - _updateTestRunnerConfig: (path: string, shouldUpdateSnapshot: boolean) => *; - _testFilePaths: Array; + _updateTestRunnerConfig: ( + assertion: ?AssertionLocation, + shouldUpdateSnapshot: boolean, + ) => *; + _testAssertions: Array; _countPaths: number; + _skippedNum: number; constructor(pipe: stream$Writable | tty$WriteStream) { this._pipe = pipe; this._isActive = false; + this._skippedNum = 0; } isActive() { return this._isActive; } - _drawUIOverlay() { + getSkippedNum() { + return this._skippedNum; + } + + _clearTestSummary() { this._pipe.write(ansiEscapes.cursorUp(6)); this._pipe.write(ansiEscapes.eraseDown); + } - const numFailed = this._testFilePaths.length; - const numPass = this._countPaths - this._testFilePaths.length; + _drawUIProgress() { + this._clearTestSummary(); + const numPass = this._countPaths - this._testAssertions.length; + const numRemaining = this._countPaths - numPass - this._skippedNum; - let stats = chalk.bold.red(pluralize('suite', numFailed) + ' failed'); + let stats = chalk.bold.dim( + pluralize('snapshot', numRemaining) + ' remaining', + ); if (numPass) { - stats += ', ' + chalk.bold.green(pluralize('suite', numPass) + ' passed'); + stats += + ', ' + chalk.bold.green(pluralize('snapshot', numPass) + ' updated'); + } + if (this._skippedNum) { + stats += + ', ' + + chalk.bold.yellow(pluralize('snapshot', this._skippedNum) + ' skipped'); } const messages = [ '\n' + chalk.bold('Interactive Snapshot Progress'), - ' \u203A ' + stats, + ARROW + stats, '\n' + chalk.bold('Watch Usage'), - chalk.dim(' \u203A Press ') + + chalk.dim(ARROW + 'Press ') + 'u' + chalk.dim(' to update failing snapshots for this test.'), - this._testFilePaths.length > 1 - ? chalk.dim(' \u203A Press ') + - 's' + - chalk.dim(' to skip the current test suite.') - : '', + chalk.dim(ARROW + 'Press ') + + 's' + + chalk.dim(' to skip the current test.'), - chalk.dim(' \u203A Press ') + + chalk.dim(ARROW + 'Press ') + 'q' + - chalk.dim(' to quit Interactive Snapshot Update Mode.'), + chalk.dim(' to quit Interactive Snapshot Mode.'), - chalk.dim(' \u203A Press ') + + chalk.dim(ARROW + 'Press ') + 'Enter' + chalk.dim(' to trigger a test run.'), ]; @@ -69,12 +87,89 @@ export default class SnapshotInteractiveMode { this._pipe.write(messages.filter(Boolean).join('\n') + '\n'); } + _drawUIDoneWithSkipped() { + this._pipe.write(ansiEscapes.clearScreen); + const numPass = this._countPaths - this._testAssertions.length; + + let stats = chalk.bold.dim( + pluralize('snapshot', this._countPaths) + ' reviewed', + ); + if (numPass) { + stats += + ', ' + chalk.bold.green(pluralize('snapshot', numPass) + ' updated'); + } + if (this._skippedNum) { + stats += + ', ' + + chalk.bold.yellow(pluralize('snapshot', this._skippedNum) + ' skipped'); + } + const messages = [ + '\n' + chalk.bold('Interactive Snapshot Result'), + ARROW + stats, + '\n' + chalk.bold('Watch Usage'), + + chalk.dim(ARROW + 'Press ') + + 'r' + + chalk.dim(' to restart Interactive Snapshot Mode.'), + + chalk.dim(ARROW + 'Press ') + + 'q' + + chalk.dim(' to quit Interactive Snapshot Mode.'), + ]; + + this._pipe.write(messages.filter(Boolean).join('\n') + '\n'); + } + + _drawUIDone() { + this._pipe.write(ansiEscapes.clearScreen); + const numPass = this._countPaths - this._testAssertions.length; + + let stats = chalk.bold.dim( + pluralize('snapshot', this._countPaths) + ' reviewed', + ); + if (numPass) { + stats += + ', ' + chalk.bold.green(pluralize('snapshot', numPass) + ' updated'); + } + const messages = [ + '\n' + chalk.bold('Interactive Snapshot Result'), + ARROW + stats, + '\n' + chalk.bold('Watch Usage'), + + chalk.dim(ARROW + 'Press ') + + 'Enter' + + chalk.dim(' to return to watch mode.'), + ]; + + this._pipe.write(messages.filter(Boolean).join('\n') + '\n'); + } + + _drawUIOverlay() { + if (this._testAssertions.length === 0) { + return this._drawUIDone(); + } + + if (this._testAssertions.length - this._skippedNum === 0) { + return this._drawUIDoneWithSkipped(); + } + + return this._drawUIProgress(); + } + put(key: string) { switch (key) { case KEYS.S: - const testFilePath = this._testFilePaths.shift(); - this._testFilePaths.push(testFilePath); - this._run(false); + if (this._skippedNum === this._testAssertions.length) break; + this._skippedNum += 1; + + // move skipped test to the end + this._testAssertions.push(this._testAssertions.shift()); + if (this._testAssertions.length - this._skippedNum > 0) { + this._run(false); + } else { + this._drawUIDoneWithSkipped(); + } + break; case KEYS.U: this._run(true); @@ -83,8 +178,15 @@ export default class SnapshotInteractiveMode { case KEYS.ESCAPE: this.abort(); break; + case KEYS.R: + this.restart(); + break; case KEYS.ENTER: - this._run(false); + if (this._testAssertions.length === 0) { + this.abort(); + } else { + this._run(false); + } break; default: break; @@ -93,7 +195,14 @@ export default class SnapshotInteractiveMode { abort() { this._isActive = false; - this._updateTestRunnerConfig('', false); + this._skippedNum = 0; + this._updateTestRunnerConfig(null, false); + } + + restart() { + this._skippedNum = 0; + this._countPaths = this._testAssertions.length; + this._run(false); } updateWithResults(results: AggregatedResult) { @@ -103,29 +212,34 @@ export default class SnapshotInteractiveMode { return; } - this._testFilePaths.shift(); - if (this._testFilePaths.length === 0) { - this.abort(); + this._testAssertions.shift(); + if (this._testAssertions.length - this._skippedNum === 0) { + this._drawUIOverlay(); return; } + + // Go to the next test this._run(false); } _run(shouldUpdateSnapshot: boolean) { - const testFilePath = this._testFilePaths[0]; - this._updateTestRunnerConfig(testFilePath, shouldUpdateSnapshot); + const testAssertion = this._testAssertions[0]; + this._updateTestRunnerConfig(testAssertion, shouldUpdateSnapshot); } run( - failedSnapshotTestPaths: Array, - onConfigChange: (path: string, shouldUpdateSnapshot: boolean) => *, + failedSnapshotTestAssertions: Array, + onConfigChange: ( + assertion: ?AssertionLocation, + shouldUpdateSnapshot: boolean, + ) => *, ) { - if (!failedSnapshotTestPaths.length) { + if (!failedSnapshotTestAssertions.length) { return; } - this._testFilePaths = [].concat(failedSnapshotTestPaths); - this._countPaths = this._testFilePaths.length; + this._testAssertions = [].concat(failedSnapshotTestAssertions); + this._countPaths = this._testAssertions.length; this._updateTestRunnerConfig = onConfigChange; this._isActive = true; this._run(false); diff --git a/types/TestResult.js b/types/TestResult.js index 4442398290cd..7a293f5862f2 100644 --- a/types/TestResult.js +++ b/types/TestResult.js @@ -78,6 +78,11 @@ export type FailedAssertion = {| stack?: string, |}; +export type AssertionLocation = {| + path: string, + title: string, +|}; + export type Status = 'passed' | 'failed' | 'skipped' | 'pending'; export type Bytes = number; diff --git a/website/static/img/content/interactiveSnapshot.png b/website/static/img/content/interactiveSnapshot.png index 0d42f67c4c8c5e51ec561b5846860e765b5200b2..f43fd5f8a9afdad8aed9599311b0a19996e9387e 100644 GIT binary patch literal 131750 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%0DHy2>(vEi+zM_B6SIejQ-#w8DCkMP? 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 literal 31245 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 b|LkBta_{za!7GPgexjkYTtF diff --git a/website/static/img/content/interactiveSnapshotDone.png b/website/static/img/content/interactiveSnapshotDone.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7fd653ef42e722567e3ade81379d94f1feccce GIT binary patch literal 33880 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/website/static/img/content/interactiveSnapshotUpdate.gif b/website/static/img/content/interactiveSnapshotUpdate.gif index 83928f705ca677c9e00855d0e1b008a517b1ea94..5b41cf1ece4c6d957109daae1ee86108cacecfe9 100644 GIT binary patch literal 825337 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%0A4C^sMJJYv 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¥GWfO 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�X7){e@1bQs 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 literal 217622 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

oFD`N%yZ`U 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%0A0)rYH|6sp!#!!tBsWo4?5+q-+1y?y-ygG0k3 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
kkji3#>EfaF zCi(nW;&calZp-$~*9IS^a2feYj8`q?LZrCps_x)=9{#%W zCzSe@>h9uEl3z|`d062|gXXrRuLa(1D8Jrm+*8icGG^`5puMLqg0FLrcT?rF2ClEZ zx|?At`ZclQxv&Dop^k$?B0igpg3?FM)^RK_Ia(~&-&GCQ_;v1hbI!lxfMTAnTqm6x zT<4g6&JkKV#@;`hbSE0~!Nz0*{9ph?U9&CQKz!fe;@ad^-Q+#Jc_?60;4dc+V|`re zTmIn4I&J8_-E#!bmf)BK?&~M^prP*)L(D;raf7VfV=+!sTVEIYnc_L0S8%JL-YIY# zxz;!Kk{J0T_HA$%$AapvP@@>l zw|kd*N0V1ulm7^4X1KSPU9O(d=E%|Is1Iv@9YeOc!ij*W10Z#nvbs73AStP<5J`ZN za)vSh<5N-L<>g7GP++NL)HX~4yz@%DtxEGxoct5z1K8T(d@X!@ZDH4+NWl0szse4hM5Gu)GIuR)sIFCj z9tynN7_3IUb~=T>V5q>V_2GPH$d8rziw=>N&MjLUU2S7HtrA$0dRSa$`uqM)(FJ4= zUd+I`0B@B2oJ&GQ=(5HzAQXsYou34mA0}w;BrR%?XYfi|)Z+k{fB$C7A-c)E6A@vL zC#%Gt^nEWp=dSSVXL)*;s-bi9mXxRcPu=U8_CQPPLPy8V@0G-qJr;Ddc6E(+c@^Ap zqmhD1f<^Ctcrk(q)ZhO0nnz-i_wxVUYx{)q%nH5db5;1n5`|Y(Q{8$&2&&?#dr4k? z!Ong+T2tlXSx-!~F1N+-6BdmIOUm1;N&)GM zbxoLpeCN=Sj3g=;bDl$9PZldzGXZ!R@R$^M@VX$8(slDZit?J-2o$U_QP@;74hhblbiZbcqva*THi*0MIO4V72>hWfrUT&gnrSr*G8RwJCtR8<*Sz)es zZuBcQlzeZ#h$?Gd(Rb8BwP>a#@umiW#ZLf~=PWywR8dP()fKV|vnuuU=}*YFjFwbJ z*)^5=^Lh)t5BmnbN6Uw+t7-QZ+RrAq>Bka>57tY9bdeZ}7l=9v7r z;BM%DFThZFzqIK3ix>75XNzpr7lzNKR4{ZMG?r*lr!9VOw~|IzIIMqU`tMA8SI(o) zy}o2vcCXQMYEU{OTgYm@(={ScNLi*1Epz$snRs;Brwkp}yY>Tkx|l1lh0@y``5Y$iC4mhiU@ zK356bOmt;06&%3#tLJW#ysb-xCkOkr&#T2N^5uzq!4K%qsHvV|8k}``OpQHWQ|#J_ z?SU_)W_z$6!bH-j#hgy;X74srD5SE^WjBD+=DUg)5loYl7&wCg(6*FB@rcISE%KH? zWqO%{!_aUiPQgZ~ZXw~=UyrwDg%xjpOQj?l}bR>zd3V*kRrmN zu_^G71w^|B0siU{-*1njmVVQTXRg{_iWf@K(IX-qG#Mski&qsVhfZm(mkF4Dh|^qd z%4sOzccHenzJ;2{GJ zWJ?q~iw*LZ(2JDPBe(^%PJ%3HR}(fW#X5Lge}Iic{k2^+ zM4zpn#itCmuDLsKE7E~Sv-w;;Z?q3Ebf)ZYH!Z1fzRFS-JK=$@Cf#JYs%2$dXXV=w zemM(?%-QEcx8;#Tu2l8FHWK!T9rze6f*o@d^1$8p?d8>k8xKI7sz$ZSf3gu5-i02D z**VZ-JR)k4G+x1A=ZaNs4R$Yt^+%)Jq{>{rHU4>*zgD?mvr@KqY4AM0gYD{ zvyDgpPB-R%5q%ogvc^xn`y5TyWZW1^S6D*-r0@M6leB{e%tTw3=5JK&5RyX*} z1-HveBzfgMi}0H_e7@hOv~zzPQex)bRxg~Gdd*`W4OrIGO3uAFHnri@f2m-aaHx7h zf&0+uucO~w6chZ9Uu{|v9hbCuzgE!sLssP_A@1r&$@J7>Z;sn&0-RBtj5Qe&dPjpF zOLyzd*m?frJgBRMLv;*#(agtTxTmOH7yaz(4G z+~-F3`(u-c)4FJwgbE_bGOth2s?6+5Hv$E;x9MJ110y=Z8PG7y7z~7cXY|XT1nhtp zK@m4@#QeifXhq*cVF)Mhxqq&mx<2|3JE8N2J4Ky<7cah9^bb4XbjPc#m%%4fy1v>b zcTC(`Uak4)w&FO}@%A}$a`l*F_%~Os&Z$FJZh0mDS@k}B;4=Kquch@_5a`5N-wJ!&+L8te66$`${p6>dPmlW6G5WY!CJ~qbkKRAYGZe^S6 ze$W`(e>sx1byKJFpJvfReT z&D_fS`+NCx_piw@=1%9|KO4#2zrURR`)l?ub8oDhxjXikdBA#eBS--25}=L*cnATJ zO+c~Gt5XEdJpx8Bf`_Ra!RHvk9}+<@*Jkm#kzd$^2O}hOy}~!x4hu#emAf1+0l9A* zEISox{f4b_F+xQ*su&hUD`iu{N9ph3wFRT}+M-x^4#N=P2OCjFA<^ENEQi}j{8Y48 zS@iMc=rh@7w)ki>-55ursdg1gnZf2V#ip3eDw&#Mbs_iZhwn>pzSfNO%Qg+i!XFUW zqOcH8M(pi2Q)&ER2M6Fj6@OuTHj0B5KP|EP2P4)-U&(G%TE5)mi&7v znYot?2vNX#6sQvg9!f#vP*Cj@_Gt>|J_RF`!lReM=aj-9nj)B!BHW%LI-MfEpCTcY zDy5eyfk2>8C@wB8K|w(wAt7O5VNp?02?+^#d3gl|1w}dXJ=;@7njSIFT1+By1BWzySw}Q``^8Lmp~vyM@Q%8<`x$hmzS4US66p; z)BF1eUc7km=FOYQ$;s*I>G}Ej#l^)>pFVy5{Q1k5FDol6tE;PPYis-a`+r%Z^#An( z|AQk0;+2Gx2g`zn{Pc?$Rl%0^oYHUWZjY>mbuV05VuM%~!69+vq~uHS2_#BJW)?m*Eh@X9FfKQ*sI=^EaY=b~jaOw= zZ3E3I-cdm7v44JJN2e9xuo@hy$_MX(b`1{sNh-+-0*9rBUrzv9O6-T^0F(yXn}tqA zw6Ovoa729ZTLbE(xC}~KVfAMNn}(*Wz|Nm)L7v}8Q9O;>6NUKyz~6Y0r+ah7o*(*O z)f)sh0p9`+{}0gn;s1l)7aFGiLvLD$^}qBEdvU$fC??1S$ zC8Wv~9RtM0C*0IB79l1FrKF~31Y~6=<@)8PDi;>{6c?0VtE{T_$_nMzdK6Js@1Am4 z4F*x=g>^$7U(u3OmK6acqYikdUikde6?~20b0{9>S2eeIXI3UD-dW8t z`+UIcdM$Tg^>hK(s@GM)uA}g9h?a!1tPm@}-b!fJEJA9qo%|=dysYS+M6!a5lvc3* z*ZevEe}z_^l^rDiqAmR0ysp@|dHHzwa(cP>`@0!pRW!B!`2tGUSOk&(KeYe-&O3F$q)|uuV$p5Abv16AoxE(+n|4I3sPIW zfvkFxKI*RgBg~{6sQEb~dc9^&c(e0L!hma2N}Wq3+3QYD2>*p^Az!){|5xw8wWsf zO2YAti<^#j<+J)&X`f{f_FAFYY|ggTwBhX_$AckrwO`pc$Rl5G>Vat!>n{{`c{KnR zUU;OPgv!6tzV*N7ggTpm*Mp1?Pknj;eP#?-Gt0F4RdsInQ zR+hEJRZ~$lsF_4d!0Vzb<@++^Um$t z0XG8eoV}7oz!l=)T1jxKwql+PTdj=-+5TLUqdg_izV7zbe1D%2NBpFx(~O^2{}qo# zf3N3f4IL}xecBa#s$|cl$oTdspQYG)7GLy#?p#u#SQzD8mwYoX(|xoewD4C@_IJOe zG5fw=6|Jyr4f}|TA=w_cvu{!AeA-%E@~F2Rb|CIu1qN| zDo&|ruBxnl-13tB2>?ECnv zzwgbP*SpK(Z@z5(VgA|LUZ0tpVPg{XBK35mSTtolR*wT~t4&EsO-s+nOaW)*=5lCg zX^G^e$|*xiDyv95o|x)~4YbBbC3=TIt*ttG0-%ogST@ij7>w4}l&120FiY{?{c!sR zCq{UF~vvmuL%Z&3cHN9SB=zZqugqcqzlA*CQ7drAsXUOsA`dR zQOJ5g(7TvA9xtSNl)Y`58XJi)Lt5M7T>DA!fHjbAk;W5Y5U%bWgz&lg!pziXRBou{ z)yptm+nGAa$4k#!S-_(!P{#GFfn>c{n~=@O-sniug|?7ll3hekbmAc@eNuJdnF_Si z@J*y~DdOHQoB>24^6&}vhrh;w1<>1TYV^IKF18ub>Kp32(?4u#nn!YUPV1|63JDp8 zk5Y=qd7C~T&j%s4e^l-!yzhzIO_zC=+j5wc`QROIYv&!C$Uvo37qBEF9c}*Bw;roh1U;DqA?G zsoWcJHh|u1|5)q8k?e3HvLrS$9Y!zEh(;2OZyftXEXrKgUB<jfSlM;{ETQnr>KKAtrCHBOwiG9HyPsdlEIkiBA&h4c_x_-qfJ zKQAl&uwS88rfaA%zUXezkO-^(o#uwnHU!h_$;#JZ*8?}SYI}MWO_KDPsr#LbZV2$*u#Y#fMt#^ zvh~~Z+8zR&^To9LJvEGRVwX>rl+Ij^`B6M@FY9cgG@IXclJsYxNNYfO6e}oAR20AF zifgA|8IH8zY+p+AEx9aHA@+rh9o*hCNH00OW-b)EGW_jf_XSzDB%uq>oP8>N`Zr}3 z>oUD2*!0~+HK%k58Cpe(e$Iz)T5lg{bp`m=PW4|DFz*X@I6Pv0B+D;EhFABKVH$J( z!Pt^?O@(Mf#U~Ayr=ZQ)zfYj^og4Q-69$pSW0};ANG#M^DnmpWux4(wR(=-QsfP^GF-ZoE#w)Q za&IVKTF86k+RUr;!Yw}KuO3A=U*OUxZBEkAk9;Y#Mj&$9!bsN?spRydphf9TsvM48 z+qn9wJn|F1|B-ok&4(Lxz2?9`?2!{muZuRU9MPPiWvXI+VBx?&pm&(%N3# zRZ45(&qf10luL(Gsu`)LxU=9+lk7n}$lxLKlr(zPkv=36)#nM$+(%cx3lZGc>@7IT zvBG1hhx999FEf0Ub5Ao@-7?r+2!6{%wu+5;PGAaB`CXoPYSZGi2kK`nUewcW@(7`C zdNU~XCfaRT7l{O7umW#N&*HAU%zt>ZASJEBx@XuyITgwSBPtwda+_NssLn^_0bQpL z=8%o@1`2sqp5b%OlW~qkQ}#Oob+xb$KHo%T-3XYoXv(=e%~dw_*H|>=w;ekzG!{+S z%W8IJhDB3;!9v}!Xv)8KTIn1Q1LLgbKCoWYxmzJZ0n6EV50b%dJFc1Kd2C{jMVmf(LmdPKG2METJjej z+7XLOFPfRI5c(E1MFQuxj|?^g-f*ATl?Jg(07W9P?;b&c=|8&L=5av{Cav|Zh|+TW z2PWH5iu~typ%&#``l)KYeooe+ZV}RIAK+pjIxGmQK49Ryl;s5lCrzL&7l9wINugLV zk8J0wTZX|T(v|cQ-4XKrY}5+W;^1corx_}p$GRo(1-4}CZ zeg&qENvq)O(W?N@vl9+sy#YJ9J(cS3WkC6T8nh7zquVi14=p;bxV(utfs7@6>3e{Tg3H<8zsxp5f5vN36C4)znVQ?-716O{_v> zL!)kj#JB-nz!gD&ByEHy0S~sm1Pc%V1S7=8T;Y5r{(8Cm=}iFzZd^vA%(X^6?NW2C zs-U<<#PwTYK@J)h+hq10AGTSHRFgiEL=BR>LO7+%t+{ujdHX`%D|tl_ulYH24RoHr+VJ1fhEku-LNq_ zBG+`rbQgg&J)3+7#E;dD(S2~diuheNFl_)~5a^add5})U=OcJQ)U!-(Q-yD834ym_ z&P@i5&|;Do61ZAp^YKAeV3JaVr3UrL#pQ%!Kh(oKNlC8cCYT2Pr}#k+9@di}@iXvu zRmceT2Pj}3XBpb3>8MAgC3;WZRhQJ0 z^8m7?xeYRSGTqJ=_r}AEbyvORfA|#lg)F^H#vkI z+s))Yo8j$5?ijofWs1ZWTNn%kq+o#>b>MvY)pUArZXiG%KvW2+K?oMolE^}f<7&GI zwXEZMvX&f^mST>9EZSBI{dU2APVrDcozta5=kls)ysWca{Mj5wd%O9F{5yOW{aW`w zV}VvD&RcAFZnyj;*Miudf-n4qAM^^BoC-gO7B1%$uCy1fP8Y847j6g@ZRr(lI~DDO z7VYH}{c11zJzd1yF9L+ABhOPBFhJ#3)HgHg5(Ah(;thK8=A{5Jx-u98#)NT8H$e>O z=us^3ekN)}5Dl2KtY~16M1T1i+8Q9WX z3BZa9&6E(Yu#jIOlt|=4boI;F^wCEX%HFf+Qm&k5R!Tx8jH&^!6oX5W4zG;0B5L4X=xKqk-;LkL}zFz}6E?JV1&HrGn-wBXMImF87tsnp5_&q^x+HJNMo z@dFf;0#Zj3B0GFD-`KD$@c8nC0Ei#p<~B9}Wsz;mGi-sA+$fzzg9nnh{9i0P+`|eu zm_V{^W(-iiI)k9-JV-ZJKe0#39SHrN0I?mu=}cksqp*=Xz@b#Q-v(Uw72rpMUjx|m zdce>`xPv}YRTy%M1`j2u345}k4&bmGCwv0oH?>%(UdSz0F~*inz!&hRu!$<_%lJOJ zh6FSzG(Uh1L}~P;H;OAFwG*It3Y7O(tjAoNOXydQi zYcYFM}+|{SGKXEbOWv>2`S<2 z6u0Wsy89@V2E)$40tp}=TVCft_;VUK000JRGcVHMuiaEQUDuv=?)Q0A(8^yDn}48cYE&(Bj*neDFv2XplDr9WfP<{=AVHCNU*c& zXlnE`sgy?4cAsg!i!8N|WLuL)gMFmK&d$J9Y0tSD!6i|hU9*T=Eat3|?CE1jj#bch zY&VJC%`4f>yYjeg1w<=*+JLI_7islV99R)ibxUZ~76!HwrK2vkk|et40Pvl}!9X=8HsAE6CJxV6DZY zQ%Z`XK0;*38doR9=#KP#>!x4vJ8|gR6R4jEv*JAfw#2AiQ6Bf`7))fJ)Qxrk0AIQ4v_l@zR(LBlI#V*xbu#wp?hwz%xvtwK)5B({rI#go?H@hOf$F#KXy6+|bS_;38ac zt@bGy``Niu>W3R1^IN@A1rkmZ>_USK#B(BbL{#(+| zSDvn~zFS{su5XBc-#Y$%+vWSt{qK8)-{&QZAri&jt-zOO-+6wO|5}#|BUQY&ZNBji zVKWP&TW-MqN(&pd-SPYU&0w=cbW<@MilhPDF3U?78R89_nkKCQf8L3{M;tx9Wl>go zuJft)z}AVaTFY;s*2l=F2^C9i3e@+~!Y_(k>Xt?EEr((YUj4MTuYNuCm>b(oazR5es zw?ZYufC|wEy;$aGr_%0?#ryi+4JosT`wboUlG*t&p&2;epc>*~6cFu6jXBL3SA_a9 zS(b8{6NKHbvfa-*&CL^vAfHAm&+lhHK*w=a{Kk5tf z@peKg+mJiw^1X38=jjHsJG_?z9wZkv{GC!?Fi4EdRzN}vBtICda!2S7@u>;XaPcKa zr1+h_#o}>s{z69fmonDIpAp;mwe3wL$m!vUPwPC98Wp2CyS8nZqcq+KtjTi46S~$nKAYm45ZTG{;mOBRjO1Hbo z$2wE+Z>H$cU!%Ktf$=wIz_&(@JTm53%wcnjuK)AH!Joo-YZ+WLe&%w3gJC4uBu;`Y z6#-sqT9ihYw-OOEZgw-bAy5i|$1$BDCZk<-)Ghh=aJ2ZT2#&YILK&L2NOWLXZ?;E@ ze8jk;SU!TlCIto}iFyjDZ_Zs*kiz-Y$_IZ$KFT^vuwws;PzXO zXY5)St&=&Fy2=Ds!zYtCG2gmPvm^4#k5K_Pzg{I%ncw;99&Z zn~f<69*RxG2f};3!{{Eu~-hDkaiP{HkbTGJ9b9V%_7dmj>c6 zv!PidB-@0s5gNd3fT4G%mwKDG#Yus^DAm!xXPhV4Z}jn;w!ZP4|1yc?zTx2qD2oMj z;X%sxy66BHyKzIRzrar&Vm~9S2-`U3P9Iep@=G3+?PXV&V)8Tt!D#I}Qaw-sfj@YV zC(Q_c45DiUhMdlB!SS9xwiqpa+Wb%7IjyRQ*zu8swITEsJOLq8$+Pxd!F!Z82xy9S zz&X^O*o=%>sLpEwm*eI&0GR8<_bGu+YHULsAHnSXnC@l|_!Rp^0lmPWhUyMh4)6l@Xgi$JdCUT$*KG)P%DE;vYyBHy=cy|tW0>aTP z0M%7p_hnhxGRV-@qi5*QlMq(`HUe4rC8bHd5zgCx>OKN#d5Me8b2#wf;O?^Gt3Oi1 z9!tjJbvFY}NWn3lH-9JEx;{C%K$h_7JZzwE#>8c8CWlt%y^{pnYUXh;ZWC<_Km3j( zelJ(z7PgMg`&`3Q_dq+UxW4pQ-1P*W4sBU&!7Wu3M?v2F(K@PDer`IrAjsPJ>=$ZVAlLX_9GnPjsIUg1Xy3S@_i#}0J&QxU_(dtoW8uDHjvE^UK*XB?)|wjz zlO7UMn#Tixsm0d;V)+{VBpmgaCbZsFK0b;BLCVH6=epjoU#miB z(KLuW7{W}IQ)gh(YuLQ*QJFzk9FQ&nFMIY@mMk%>6IPNgVj}4)>@cjGpiJ~_%Q`+} z8*ka4#9qG2GG5(9^xcY!6$>{}4={S>F*M;d&nJ46ymwmqEtMTYDbVx((!tSd&+U0E zWkqx~7teNaH`l!OW$L$qRO>>t+yZcrSt`2>O%qNwI}gXH)J9u(Y5N zn~2sYY1{U!CZ_f&|IK@5=*m0K?pnBV@CpJ`dovCp&-pkKTooIs-spjZq(&n4%eHsB zta|qA7!BQ7p6+;7wZXX2+Oz=bIh0ghY;(J^fMEH=sZ%8Pc04b@wcze`!Rc2}m}$$A zU6VY-&~f87q#}-sC=tyb^1&-0Ci>m^s8})WOwxicN_gGW_Likily{Z)8Qx8>%cDr> zsbx>8>}h?%^%j4x@CYrBN;ri57R~+J;&#Y@(N8IG{Y5cx7R%0H-Z10oF`1I%jUxRf zcwGL*Lcq$z!i9$_FMF=RR7Kw1L2UE4vYBBbL-2YLKyYbAWpk}{oBU&-|IAhLGx4Kt zohJqAm~LSpO)riPJ3{gr|6Rnr8$l8xgwIDy5^~bzl6V?DAi?YNuL#S0seCep&sj%zepi^?$GS99KSu_+PWqCQJT0o3_?@VLH-w9|pwTgE%bN9?;U7*{ zCdxkh%mRzE&hw?5b$OtJZ8&%e!UN$4Ng|H^;g6j(Bc0)ni%1X_&_m+D!SV$9c{>d} zJIhb|+wP_e&`Fe*qJ58|*E!k|c8zRHBNHVZ(bun-;TBJR&lFHjBypwxeJFkttvl%Q zFe|db?XzNYsFWoJCfWM?6v)-b8ifNDzjnVXp;1-38?jvwafmyBXPeQG^s~-4{M)7P z9h2RhJG8{`RnI$)FKSFRZfg|>j4T9FjrRse{;aJ;97w+fqD++%;^ApsU+#WRe0f;vJF|dJ$zk_L z3WneR`TZzRRLBXuI{5))^6K}!UQL0w-|l;8{fPM_w0+l9A_mT{&R9=Av5j1Q$qUMf zVV}Z4&|2dA6KqbF9h=;(X8_dnPc02;X#elD< zTS92i58wzf{4wnfuq+f?8jRR~q$*B~l&^|Z9E?<6j#NcNsmVoYcyqz2!J5RV$>J?7C?Z33(_t_Tf0S&aHR5Y0T7Eg-i62GPJ_6UY}{ zF_+r}d?z{NFwtkLqFsrxyEJg>5*Xhc62B1RBNwM+gn=%)2ztfdtcp`>1YaTE322Lp zXhSO!qLXnkkwl`>I6%rIl9!3ei1-w__%wWchIf1xF+Qg%K5sC-U^%`Bkx(p`P>N3| z_fDuJCRA4?)D9-pFDEo05*y_boA8M(-ifWm#P+JhPRGQuAAuYF#7>=C?U*3$CZb*( zSZ)I}t%K&ql788e`d)$ky)86c1Ni7M%^0$WSM+2P8S}-3R>@8nM9Jckx;6lhz@&Xw zu*(9A_7YY|2fJY59t$vaJIlDY+N!RaW`j(geYsEod1I;!?Zkj~x>B$yu&1}sI=Uk6 z480Z{z@kp=MuPV+)<$rX(>lOgN4$A9-1daH=?w zn5JHKQ%Y7{&Mf#PYW$9qI4XBa?gjJT~UPyA2fIq$o-r0k>Q!@wmVVCLoFP#cp0t;Toqc2k| zxE7KwW8s&l0e1<=-z^xM1!~zMc{dxTj)l9^!MmYgc?mc#2EJ7ey7}}R#44>UR>(dA zZ|4*)4*{0}aL`wnbqdTwf_gI^VgF0@8VboLAF_!_)zBz&*a=oqD2?(crIaB~3a6?^ z1y`L-PsFCz*_Py9%|0w&`ubURY8Zl$>KSlI1dtEHHasUny2N}Irw_%#}?;kLe$VM@+LHj zE1+koy{%794lAv0YUmoSjl5|(<*4hx@9!&y6fL{^e*!9-0) z+5t>QsG@)lMy)*E!RBaSLB4D*;ZDR~AHn7OIJ^uEb>6dJKiBhS3qGCub#^arSg+4) zi62{Sk!5T7Ojc)Tu3oh{J<;oJZL4=$cIUntQ*!m{)bm*W6&r#hUm{(0e$hqecWoyn zX=fRhu>nkm7Og23tS`epOg~?DL|$1n{+|41Q&l)!z zyK}k|Ei;MLzSP#JPWIDNgJ4LPWSIcxMnzZE*um)7pVhIy>z=cu@utrGjJ;plT{em=SoB z1C&7p4%8>%c7T69XnuqBKY$3~b@|NO`^IlBgugMPPGvj?y`P-C9v%s$zj<&&z~bwL z#~(@Tm54~tTM=fiG&dHsUNX^8^|l5FGQmMjanO@ERJ}7aNDF#k42V|DsEAFOV`l50 zs8&CjssE!ocxcuPJ6rvF#^wd&=P-zx{#KN#l#F{l`U3QlY*V3C zUfaC=t8N__C>XcFVwSKSyCGmO&f6j>IOZ?n}|SM7n>2eMF#a6L{o zrZzdDat&!84n4dx^Sod|p8-HvXXZkXo%0-qU?;ck_7XF7=D5Sz`-pS*p>gy#tL#X7 zG9X<3>Gcb@VAD6pfluD2pw2IP43Zw5c=!=~jcrv{@Vv618lb5~k^80-wl9`wy^d7C z%$~$K*eOG&3?2Be4(WxTicP)_aR5oD=Kd&uO)q?_;#_lv{2}D&=W}ZsHOkQA3oEK? zUnxn5jC%2`g5?8sy21K%K>^$05BzG-)eDXj<|#`}gUdCv|AVym3TyJ)*R|jDLV$$c z2}ODd9RW4;B0^9QMAV>kK|@ixhR}-;nsg0CdI?2AKn;jAQA1GyQ3Il)qDDnU(fq&6 zIoICbT4#G-`z$%lHQqO4{Kj)XH)tb*0wc*Fj=L*lJl|S;_-ovmjB)a_2bhP;AS;{O| zhNs_j=}TPG+cO?uD0w|Q3W=j5&h2fdaFfj*qWID1R5!qwjQDi`IEI&LK|-T;ZN0vY zoIV3RkPHRUKR*2QT;sx)9Q)$|U2hwf>hz0c$Q8H7haY2LpeM=iu7y26@Dc^*d@nr1 zbrS>*7i>Kw0YiVkU#xq3V^%bXe_2MMX|hH4=xNwQq{LHR29Z!l2|x8nn^q6M4ut@+ z43P8*Ybh-7Zfn^Q0EN$%L_gThB0N0`2A$e3O2;n0_$}8s2^QGu0Hy1N)P{SYVqUxJ__xUgr z0pZIJHFjudd6&LskHnTAasb0<*?G6o`mS`71M-%R>c3|q#~yIhz%iJz%V6kqm{oc-)alH7dyBpu<18i6>`^8({REFmi`BXKMi2PdS z(a^Uwv5l;W?6`~~Wl}O+YlD&YU+o(kb$O=mH|psQTJIW44*QCMWJ1`%0z9Ju619Tt za*`;}@ad^DL^tFlvAI};)q1U1j03?*FE{`=n>a8C5gOLhW>xoR*;(>5-2?7aUQI{z zjJ4Fl<;0VEz;d^I>vVc+?bzee)eQEv@|RDdb$7jZ@r@?1F-QRU!;%K4pmtLJb{&0t zsBP*5Dcnc3U!N?UE2_8dPoXGr*RzX?&FK@RRqa^E>zDCzIhgazRk-?5z`|wxm(wP4 z;s=t<65vmwHa$e!hn$5inhBrPAR(+2_>MKOzfoP1t_i)ghyflJjafyj^uIy(slX?b zuCe~e;G}j9$+%|C$P5S&Z@Zr!9lckoqik&`k`~dbg5J@d;z4!uI-WueS&@djaB0as z&`W*96g6WK9`dx3>WW%EB}r_ZRy^H~YSmv!rmI3VmZ&Qw+j~%)hCZS>05(5JeA6vK zet)6r&|K%P`u!(ws_V_?qF{Dd4=B!-3fcL<)VC)JcT7~J+}bOq^clOq`;*0HkHG2> z&Q50+X!FZgfYoU&RSUt$r5!^9@~*}y~1 z@9wN2s6glH5qA*>1%ArUlDbZlPEx#~)lI|k>ih-qnpG;{lsgvd))$YDGT^H}ksumH zOtoqZgQj#!YqS70twlo_S$Zm!4`FW&sj3>looE~ltnVZTvkJ;y2(3f7MW=mSKbHoL z!{za{h444$v{mF*0RrAeW@OvgXYu|eh*J$HEY?JY!bqC4z4}`R!3Ex{1DtmQPxt%E?mnO@4nl zY`ak*yQ2XWoJ<8A0EO*_{&C~;6h^YKtXlc_!zY30*wDOsVT=VTC+H;XYF^3h%$piXdju2X$i1m{%97421%DK2Qla^v&Q2E}{<`%X zYYqshth-!_3U5}~x@oDLQ~-Vvod(Z$e2Q2+*R_;bv6;_77PxtyD56t`6W&4;+52Hp z*G`{OddBpfUf|)}OYQ!#sX$!RY{N9`rb>gUv^fhJ%;sL2w%77CNe!$hlx@SGaon75 zyn*@3Oc8uQ*wt`y6dpbai99gKeERi(|4*yd)sn!Bmk&!s!_SRjo@j!46&jp%C*?rH zJ663iWcX#j=YS*@cDjWbqG5yebAQ2>kuS^l8{##wb zrGjI2tA$Szr3~L>DEwrOfy({hx05bRJvNW-&dFB0C46i7oOdsX)e@8Ze%OeaB7ju` z+-h6e*4E*5r}XaqPjQa zvJ}uS{OW|yP2Tqk^DZCA>o=cAcs~ZrEI-9Q+Ihim-(U&f{#X0Pn(ROP_6^?ud;P{m zeJd`+f6X|yjm*NP6UtH5s{$(`O7Vd5 zN375tqL7i9z-<6}mxKwTVEA36YEoDpB7%zr1nJ7jl&opGWD!+hkc;Nvg&;-fNP2nG`Q-R|NMJ`V{h38P zi$qm_!F_5*qnSeI4f3zf3ZEqaAOkFH6)8I_9LX*a0^vkbM3Dpe6QsC~l#Iubp`2z> zA_wRM1gu4{4|sGL>3H$2jY|L%b9_}#Bb&Y)f_lV6@KqQe$wDhVk}4#*b!1*CIYT6_ zD4C(j-^ru6MJ7~h@06ovvzS983P*5=)Re)iFFvG+5H&811R&~7mn>Eh2@J$V24e7w%GdJJ zt6xf&%u!aq@{8~Sp7_$lcV)@HXlaw^_qF9-*7Bg6Qm(ZXespEJe?>{8{0IMxQkG~k zE7xIHIqsx%p;GDQYTmhD<;ke>yj7_SZ72=~IP%4pbG91$H>+^UL5 z5&u8I`Awu-T=(h8D3Pj=t5eN67dRJNrE7cHDo3R2?`}hkGG!|k~v6=jZS&RC5UQa2H7<(35^3wG8Qd-F;XKQtl?zAQ!)D0C`7n+ zav3cgor3>L*z2Mv6lUEHCdjAhVGixOJ%EyINc*QJlcLeg-(fn=fyItAlNwP+l(R~x z%|TyL6$!ge7y`Ty>y+Qf17G7^4I!n!n@Yc`omPfKGQCXMqV2xP38U&^BA|2ZCa_Q2 z?cZ%Inf6hO_A%e~@&4F&O>~IFFZIzIu2($|m*N+)0p?W!l&P{~)ZAa@c>fh?>J1ba5x21iqkh^LC@L?Va=0ybm#DfHgr~@R}s;?64 zXxWQ0{bSB3XCtFfFep?6kZ1$YKx`4mC#)oB-oi+6+bl<1+j8E>tSa`0O?SaUsYUM@ z1{ZpO2v!_I!2qx-p2;2uc9ejBM8WbbKt&q`CiS$*Fy$F2pZx$H0H5jw6uBTJyfB<} zJxm*Q=;-xRwl_-fAVpFSUf{wBHE8^lg#*{3`;rqy#@Q4d0{0Ggl=z|bgeNQbOfN6s(xgakxjJeY#OoF*^kg)w= zD7%}dg;FAdf4zr#4dH|-u&$#po*N6ta~bAY@Y@W#1_gRL1%{X(kh8KwQ%=M3iNowS zP=ycO-s578((AG7G90MHh0L@7=$r?LS)d=3q+54r+fm(X| zFErro2joD#6FC6u+6HQtMeC4YFHfU>$=Ik^4qe|5bUy3v-RVNiLVvYF-G^|$5)@aC z-Z=hi&>Ih|2=u7u-SDXD`lnY>coTVIX9U2G8ig|f;QI9s$*Y#o?7<^Hpsb76d|*#J zgvQO8se4_k^lgBSa;8J;x4_IcpZ5Y|fEBc&4l)Pv-;h8bAj6V#QM(dhig*-`1S64$ zyjX)A=1?)I=a3<9=rH}p$}?8L@G!vcB9X?WX1bM$fd3|lB{F`hI5;DZy3y*FyqabJY5YP+=Rjs3&dS-$$z+4 zM7)1o4j6Hrxwknex;cn=mV9X)B}VY?|GFpguvH1s!!{iCQjVWep2}yO0PBoh*0H=1 z`|x94cZe#w{~1b=-X%{M3ii93+&00_h!e-hD+xo(&+e%*XDaUA3Uj^nD@Rw6I4sM) zUqpS7&tu)v%1s7fAhXlm-j@Tzp_U**CvWFw^yOgv-r$fQ#*t%V`I3EaWrA$+_r9zo z6k&r6QbB)=p-7G)>JJdcY^-4Q2ibs?{d#ucf%`{$Jch=lbWkoGk{I&n5TVaV4yQF90uboJR44q*or`{L`)?f?8kRa4@t_pNe0B?d3^n+n zTWWLRFl97NXE|nP29vk@;m%-Q&i&_!{A}fu!-U7RAG!M}i%m@4pZ9ED4J ziZ@BDHa(X~I70JFtoAxfI~ASpU0e{-QtDLNajvlANNZo{&Hmu-R!U|OrG4tm-La6t z8<`oI73CF|3JUw1i!&=b_`H8{^Y!MY=Iht5GrPN+E~k$%EA9?;^LhWLlU*BZX6N8& zQO9imz3I*eZ$|Ikd;ECe=f8+Dm7SBD2L9J{5X1qCZ*cKq&3l-Z!KfWJi~^JL2db*#57RZqU+&e1mVS!<-SY8S589Qo`lOYC z(z$>@koxFnUIfC#y}cN)TFYcpfU0*ZM&2Yj0ZHq8{$1c)3}a&I?!-~W-H64lFG`bN z@bBmART8+F1r@*VVrvO1q7N}fLIA!vhC8(-bb9Ce&lA+#ILUbn8Z+ZrnpmYW8xNf% zrf7>T;E^x_2_O-FW5CL=iomr|_ZM6xh~VihTsnSc3zvz{npMh*eIL#dir1a%8#Mz4 zyc>4wkMqo5DPdOvGxatfL;Vw-rWr5t7H2^a3v25&z6)Xe@M?L0Vb3KzWRgV_v|l1* zLG>mXv-sfK(&_>#L0~y0+uz+2R}-_ceH3kwMd^8#qi@m`k$HSxpD5A-E_C>T3Snds zNs6F^?Iw}K;!$CDBUA(+WVfMs2K5&^R%ivr6F=>ugaA) znVplGd#8VQ;Eiii%AWTc4X<%idF2iw0;oV58B|qL=bP&!Xjq8PvXJN-)K${OIDHrl z_@w4!^9g6vwFyb0?x3l&r2c zM11K02!!6`>dor07{ar<#t%H_d^O7s3xo%P)r$?^txX7Adyb?^nM%klNk3>F+2}3g zc}?7YQ=x){9&!8;t+e{*b!Mw$&`+O`&5?+o{G->Ya&Z2E`L zxpjgQ0fZ^>c5?#YA*1~4plV-1WSu+y?z?jDGYRjT_LHa^8Gd7J%4&UNgQmvrmfmyg%$jDJKfBjQ8xn_ob`$0aGQWMQOn5Snw z{-5BsvmGt)zcyo0Xak^?t!cioZw zUHUxIBzx-ci!OR*bIOr5rwKcB6IL`XSJgdRj4TeOcVg6d4PW)_Cq)2A2uPz4oN9IK zOG>_mliu~&i8dzye=a8LOWM?dAJz{-h*rl0rDvzCtKHzm^W#U|G@TohUq{z%Hd;NN zxEU-(tYB{V?ehU1#{U*g2jiCw_Z1qe^S&`~?RcH)Y<7mlRxS2Yvz@xjY>w|%oz#P7 z2eawf{DiG~ykLuyqsv@TAA~;Th|DeT3mx&<|~)C8qFWHxW!J-U-`Y& zL=2Rp?Zo$WsyH6wUo>`U9MNgs|K8ANp(j<)QjXbHn* z=LP*r+t1r;AC}(lBV~0M7bu=4NG0u??koZFOY_0MW%dk8uv&`0x4XCtq&?9)-`N4P z!CJKWUOtS6&^rF_F#rDh&p##n9O4Le#Z6c$rQ3i(8{f5*6_B^3&vYt$+5_9S_~GEU zEB9cp_#@aDMymYechOx|N-CSV_wB&NxnFeC+%f)CUPFZbNV^Y3b#rLs54^lqU02oj zO}pLD;qW}x0`j8Lf%@G1}VMrL>o%%IGc~RtN~{Kr{ukQ3@i5bBVPTcPj~J7*=w?>&1bercK55QJEyL94NCB%N2!@AtCQLa zr8OaqrjlK1RL>W-KTU&mjZtxHc~W%-5@VCszudhfKx0b|q~O=jggCw2^F}gmH_-Zb zBBr;d!b#IWQC2~&KLn@k*8g~N-&tgU=!JRL&+%DCo?RC#>~sqxd+(1y%Ti=j~G<{xiVW=Vs)Sxi}ViKwv(fmSlc!2 zR#=Y#1)rq%hy7ktdQ(POnut;0SFUf1*DwPOJO$)}^pC=U9W`XE9aRnN_B%~NKSRPS zgEaTbYL|#@`KuTxk9y)zia2~1(t?plqeLhE40(6=f{u4$V(i6KO2}sHnX^A^r6NV` zqmw;2^!Uk_-*252`UO(pXyu>8(?8{50NANa61Nll)S@7^8Nat__s zgx-04qBKZAlYpSb$*KW+dbkC7Tp)p~+05ckMg`@l&~*(#FawI>mvk&;+fkr}?1E}i zK|42MjtY)u)90zMo|6K~yXmkNv>O46Zh_)ag2K{;bS#*^pcSc52P%|rgnYptempr< zC5pD#Eo^;0`tM@#UQHwd9}s4L(J@2F8ijfz1^KgqwKEWA&1NNfCg9D3bbvj@nL<8v z^DGV;&QTNoB6Y1#f7epd)h#r1$?(_|a&v<}@j)7fBEcMxJQf{St}hQ118m^44^n{5 z159orA#9L5sf@-17>fXv-{*1@$U9QDIa&UB4y3>WK7$LvK*e81c{&!XHHB1S0Se^8 zR4h>B5NbYo;h%HSsf|$`Q-!ZGLcaVo@7aw^JDkWD|9$)EpAQdh-yM2m$>2BxafSnr z;vzK|e4H76hAe?&!OyVaQFKLZ1|ovZ|16S8r0bIrXBdc+G;kanJ|~Tr9D#>YEL6DW zK19fQ275<#Y3H_6?P1$0|Tm4ffV2!fnv34h2MdcbD)Y`JHL{HA4eJGWAw2^-e$ojm766p=!QmV!lvEO09G&GV@59ITvYXjvSsKS|b4j z9kO)(8bH66G9F<`Dmj(_m^VcfaH3wQRmTON@j+K-;Ng)h87&3^!InIEvZ;Urqi~TY z0Yn>kA6EkjeFvYzLCn4aXV^`VbOM0^2Zbf4Q(;T*U}xx{Fs$rxI^3}v{EsH2B*B7H z0*l5goxa>GIMSR$gc==jb+3dTtkgHvLb_3)1wfrM9>5Ul>`0YLbSMoAcBF{OvFoz1 z?Wq(oVd+|c3u>)sbDRZ9{G#(5>2xKay?YsDg)W>;=;-H{vdaKsF3`T5+B|$m?%`;c zjOcS^z8Yp{(oHXZN{B9CUy}(%eoFwQs{y~YE^e7spNs9{h9Qx^HTAfK-c$wiI)oIF zZcG$2=D>|pV9{J~gFSL>38l@hHsCM;5;%dbc)A7Y!@+0@sHqTpuGWE%Ljd*rp69W< zQi=4|Ie8rYQR!+|bQTGWgSO>8hau z5Muyjh4@V9t=j>EsIY66V1d&H$C-mFp+7?O-*7h70K$@=qxG_A|*6zl-{^Z$cI&pODH+^@~@Wiw72eP+~-;KUfYczDc z{cSS!pKBL;f1a`=h5U?VX5#N*wl3TZP6V{8e`H>a^1YWu?4j1fw&Q`0HmwpZ{yJ}U z^*Rd$&e0e!gSMOc_X||+DnPj{R~WERE)s{o+MNR1iKwiyrWrRSxE8A!QxYZfyMjm>4y3Ocjhe{5z#;^V9^es$FgW2+3 z%rE)`r(XI!2=!%(pwpnE2{@6aTiS;*D~DSCBxE&0oXjt7mihAjoQul30eL%~YEHSh z-|ImtE7gpXddc*G<>Uo3`n8Rnnb~mU5eEOS3UVkEy#5Xzip60W@B}WLE(<_e@W0tt z;Vlz1W`VIk_9-X&z<^D+AP{_~ZC;^0qfQxJ z451V&|3+fSbM~a5TRWqgT6Lod4bGGs*~~geW*y3TZ1!25606RZbj$f@y)_z8ih!zB z&fmzJGYefP*93OS+|Ojz=}gz%g5)>TOES%e^5`X!6$LfqtUNsE=!9pw9mvZGi6sf@ zN((c#E?y;qaI3CoK4Nb|i>@vK6(c~kGm?Sgp^zxclBI0qJFk?#qu84OHs)zbGb;HQ zQgrGP@f*DywS-zn#&vL`D<;LXY=9=Z!Tg&awmplJ1 zGv%N495|R>Q^BvK*lqPJpzglXborfSkVD(EfHhFy;nAV}^`p1++N_W+1OUUHnL4Hv z`fU2D^z(qVh0~{>_tKs(KhOh{p!_QNp<|V6x1PHY%Svv}ynZe=ZuMAax#)xZ%ddN0 zZXJ91Bl+dFJdu<2_?NDrIUU0G>zW*kT3dO^WTS*|V7R}bW^spfkPO|7w6iS0KZ5_lY3xUHy`+Gl)M#PvtVkjyZo zAaSMkSJ`>z7kZ!$fV9b@QK2Zp=2fy$t?ZsKVBZQJzP#7xa{iI;&U}RVDvia;z}FW} zwd?;`P{@G_qdNq+pk01#*+9p*)wPdOZ?2L*ofYb?#)D*Vf6)$vp=S>$E!JjI~Tepg38-}CFW51;mpd|X1%f+vPTqubMb`Xbz z@OK0kytTWKy269$WQ4<2r1(EWqn5)@+lJ#epsUHqhkL)ZvcBgq;7|2XssPNL^gf*m z7C-v^^f}&lq}5yOpDz`JZ+DZBnl;l+oyfPzw_K~y7w%+*7a)~MU!y*6eP#kq`cR_q zXyN-K3HubGNfX6>ll4WdMT{S>EA@LZGkuupL9L1$pu==#GZPQElQeP}1G1;Vbp=Qa z6(q$0F1`ct+YM~^4UdW_LYr@u;+0RXEEN?5ea15!_we_26e{{aj|b&fHuvdYpd$X((;F-hiSw8W z;5DRDf=vlXp!P>b`8HBo6V>v@C_cNQ<>u7VyI&|7Ews!?qq<3@g%&|ol_A}IzLnS9 zh-hLAO4r9`WY7iVbgW$cHl0UKw(Bh7#n{;xGKV&V37wl;3wiMT<6l7qy}fS7&s@mA z(s}#gi%&cuMg4v5|Hk|u9bmZo8Tb?FsbH|haHSn<1Pp?}`1!K}8;~;`ZFN))=aYgG zRs1op>Obn}uB0MP_%=Q>26DAACxdY;5jEG#=8>L^Yfv?L=xj)@LqKCuxnFxBVKT2` zzesq9uL`7yDt+d~Ky7!pAjVCk$l9VJYVDD!jiZBd*x^IDCVxc4eNuzg@M?GoLMT3D zst6`nZjMu>P9cUca1`T9<7R_Igq~Y#ZBsg)Z{hRv{Sa4l*om;r!^7}T7vCH>eP@(! zCj?I33svtG>Nn`SXB{QLt>?zG_bs$&QsmNp&E}c#W3(Dfv(NP5{czn{0zSTOby%rm zPq`B~oeGdWCDxz!@KdTC46F@!&nwbJr>k89`!#K6W({PBuwpa@>W;%X+~Nqt?Sh-Nir*N$ zJj-IAB#I8Nwt^mEEFd6LI}`v4sw{jaqfnWvbzS+GHvV#b{?c=qm1B0DH$C7~oqbJV zExP^AV3t%T4X|_qROuY;y+Sn6k5JJ8u7j&i%tlzol$Ok?#2_EnI;Xq#2Yr<#&lnbq z8i_Y%V}2jMk#S1IQ@~eNx54SIG|#Yn)(8|q4%EFtTVOqjIZd?Ll^k$sqtl!61)>5= zatMqliQ-9rg`O$L72_$hWnUiHh%rT&n1(ewf}e7X?Ck|}r* z4q2XkaY?L4qkn|su49G(P_A}zQ`5$h+YyT-X_paMw>c_2(B}Cc=~ET8xNv3CfgfA= z_qPjwh7jB+z25vi#*MnO<}emi?ut^$hXAj=lkbo!onPmQofP_4)~o&Bsz}yZR~tuI zxzs_S?XyB98%Ajz?5Z1k0V8KU88;5F+sQnO>;%u7fuq2kJ?T3_( z-FM5wO`kP%Or?qu_1@AZ!%sG$aQ_X6>xd><>>6@80`@`TshiC-YyAAy*g>1{iqqJ zRra^Ni?l|T6fLd{TSLriY5_u2>C-TLlTiEyKJ(_mz$YQ4tz&6`=g3^JUclbB>@+n2 zwjB+sq&bWk1uhx;g3K2(noRZwUS9GE9DXD2FshlI-F_GVVQY;rVNSJ0YxAaRh!?xF z&(o?$tiSpw^UT7p?YX=4QoXBWaDikWU9ciXt3$MC5|zS#V~MIaM<$#^3J;4wi!S58 zJaELY68d)El?KvKlO|zsY0+S?vH^AYCak6i3+w@@q|B_mt&F9~uVBIW-LvR?aZ+&o zC+90*aaQ$LsEB0?s!}rmAJ4_g)Tem>tz)|+H#g<%EemU9=ML11zSG#_%!Q_2=#v9U zEg516DHb#uSnybj+QPYs!0>f(<8<}0aP$HLeXiL~x7DK{XQ4ssTnqmS@zB*}6r|Y` zw=zvVg(0P8+nj6j`wK_+S!5$;0Ko+IY}^br(|Dn;Ej;41-t9q@zK=2vj!l(oU41gl zd;eIJ@&F3jlsYRUF73Sj1`|I6hae#uB zY_{bVi{Or>1-aip{P4I9EUMf(Kyfu)gK_@G8LyA3CpmCw>N#xMwT`nl!=5==N%R$L zpC(_-U1@|%iWDS&R8iaS2P!eWxv=YfRPOzZS86mMoZb;wOI&%MQ&y+Fk|r~}U)F(} z0U>SQi+h>4fFug{r23@kw$7us-}g6T%S#~}E|;9*h{&wxT`9tO9H@5O2<8kkRS~m_ z%(ZD1>7=Z5o?gYwL+;9a;#!(-u43CDW6FAwyPd+<#8M&mw9a&!_-w98iSi)hhMixI z#-4s9r=2=(@hMUr&vI83h@Z66>nSYATUXVNpK?9ZQ+yTkT4R6wv}b2eX;H)iE;I z70ZH|P*c3Ycu1-X173^VI*GzVUYN^>!tgO}`X1n{1m*c@0w864D^G;7DiEMSQAcuN z1ga9oz$r~oZ%SJWQ-U9FWhK=MopxyQ5-9sdFtdVUp!;#1KY zOt2x9jFq^b1`6OHQQ`K0Aty6J!~g)N4S5Vi#awr^26Fpe^YFcq0%3YzKgR4?6OWh@ zj(BnFSZr*x=-P{)H;q=oKBwx?6Sp1E7Xqka4R~-iV5%x|o9j^mV4B|gqQqYuP}Ih-AX>G-(Uh`(-)v6q=Gee)z(;#O}p zf(kRi$E0Wg5Xk|uc9Q4d*)u|@ABzlodr7+nly2&y@F|!s1r)2iM_USS58mzQ^q z1^4l%zXt~ejz@mXb>eu~zfTZU`>No^zgQ}4e6VtiyR~1;Sqw)Sk-WhGi#HIl*lioB zQDVj;J4;NWQuJVI+vuBo+>MD#07v zK+^oH(|}aY_W*)6aPSIp)|U4Mi@&>;yYC~I#DJN+EKt?J&pAa8!Q-oddeIS`u*5)c zPil(FaB}w>+hf@GDIj9h&-2ws<>B$Ex0g>w8F2dm%}<~6pY$81^!4JMbtYvyVEzzW za45nc7C9yZBgVWcL%wj7T@8*dV{71rm@`H^SwcQ+m89 zg+$;K6Q<3Dja;?_dtc-o&J;U>P*v1GE+G^|YLlKyQVO|e%b7`U5wzr{3jiKsPcWUohEA54|jlh+FpqQ=})^8 zn}FxXc8O^{j&KvArraWhjD=imM8QdLef4bqGSno)$Q0aRB0P|L0>GwL_JRHIiMo?1 z$LQd}iTFTfI4d)%*eAPeGA)1!I|{)4urfM$ieJdN{ZI(EF+Im7Hls05hiZ9J5;a|p z0<(0R4dRNwXoU8s=bg`_0imKP8AlC~CnqlTgK$g;kQ|r%AjEFzylp^m$n%B>J<90< z7VmsEA)^?ZQBQ*TN~PY*qD%V6jm4!2{X}X`(ivo!t~nBsO&8P5_TwP6NpMMn+#WMk zFM{eZZt68Pq(PRCgHPdDT;bnlugix9W-#$Ri~r0(WsK(sped3HgNtIpcnL zONetbc7o4AHKG;cBD(1L-v*Lq>6V|f#F&QwMITit>k|3kdB#YR;P%A|JS116WGT+$ zDl7YrQ_fQ^tZyJ?)*PwEzI>Gs>A0OpW?p_17e}VUXyinbtW>36=TFdcr`3>$v59wl z$Ww1l-!p;h$HKBhbqnea>f*)xCnNM}8Jp3zpvk>N+9ieo@_Uo*mKb2i(-ibE2Q9Jl zh@&A;as_f-JljIkWi zsF7YQ7^MshB1It#Qd99YX>>hAZ26fb6a#_M*+zp&H2}TFAS8ayf$ye{>zN4gVuh%p zk~DzgoC>5Vl9sEEnndKDz-I4%dajHBEOARM-tO8m&U!Zr_RO?Q3n66V8MEpK-x+}( zPbh25RWb}*!=8doSYXMN3)uNFOt@&Mxx4JeWJUK1dt^IQlntoU79or%_+dY1wV!W0O;`J zP(Tf6FF1q$MH2Eq6euXs|E@s6{#$_}0!Uk6B>4Ul)&Jo?5#c|-Fp4;sq>17CPYxJp zoi*0u%TM^`6Vo%=8s5_XGM~5@MR*vxQFKoP;r~m1V)k$O$!>ci7cYIcFpYzO|M8!= zlidE}KRFN_!_P*Yi;3~@3(k@Sm;G=5iP^vWC#`PA|MH)BAN-g9BsRF>?0@&41gu7c z{7?Uh3O^ootjZ^b9lV#S@*n?6+kgBgP4S}@F*U!U%0HdXXM6oO1xlHJ%;kS8Q2LHn z{7Zpyw*Kya6e#Iw>1CJ8nlGncZ!Dx=`~UqXMb*uG|HREqNb1d28$-gvFxh8;w>Cd!$@l-QYalj-7*#nT4 z43CPa&bUYk19vknJB8<7t8=eL0DklyXyYT;5&3=RmGLQ}W5pVW+(a$pu(7gzjwD01t5hXGr*T-AU7DUszLR%$q+z6@U9fXD-cu~?UYff zbhp9oOp%|?EjzNiB8FFE<96`A*xXZT!`7*Lp7`2_AUZm0x~+%le^lqJNF6}!-Y@r0 zI3_F<>)3Hy&(D>=z(sN;Dz1t%f8R6;dQe?O3$iws5b)_(3A2O%G{wCbT+FOX9{A4?H5cQ^Va>?H@2%fq;-*)<4@udO00W6MtA#X7niOR7N<}rtQ}9B-WohS=Vm_R!c+-Vw zTL6JQ$vA*gD4KVpPhwMyMEbasP(xR$Cn=7%Gzuk7*$Aqt6C5RS_F44^DMnaD)yNgF z7YpG^?=%V(5bfr((fldXM18VdPC!dIh$#tN`kE5fV0s%sfjSe`r^?iSEYh5V;QND4 zqIic=1(5*VDP`KNaZ!23YAXw5nA9wK1vfy7P@S_Winz{7IOwk`{;P08F@Aj{_1Z{a zW$Td1*GNF>>x=GJ&EmDY8k*nKwRN78h_~r-s{2}~H~2w>ka{#}czcpH#BU!1`SA#w zOs16LjV!?tF%d2O@0ea4A&HngQJZu$dzmC;GZ&!>>ub*e-Eo*BvWhkw}f){Ih>JEUH zuKAl6jx-W9wXeNeV27+qqmK!)7`U~L>C?qy+sYtA!s9|=O+qXSJtI!7%iBUHQ*W{3 z>k;ZZV7xhy_SAk#B6(mH36+X;%T$PkFdq)eh3Oew$7}d`OL?}wm>9%{+p*rY+`YeB z`W*k|wK#Ua9vS$sQ}762PLRkppx7LIYkgyY4Gy_7#in5_lh6OH;}sxTGCw54F8(dA zw8F2c3WX#1Gq5~wO@QJ3+gvfQK_-6P4k9_>X$^KuUPj1mA3G_(9xvGvAXf7_4FW*d zZ526=fI0{vR81G6jCHeet=INPL>9=6dJT&xHyZM#=rj!_P|pC#T{o%riZYIBZEXW= zwABhGuZhZzv(t66Si(~xV_?-B5w#FdmQJDFTTYIMNT_X?aiN{Sxv@Qqp)ML$nOAyT z*NlLqG}H}PHX^($Rx-?5ir?v^?=l)fr?7t9J~e9LVw)Z}Q!oEB%Xse-8elw0ME_uA z#%zC~_f6I-dt^`Y8I9BDm?^-`x^jANAID6I(nQXQCLKV0^cIPHg_B5}_%E({1 zcwt_I`VD1~y(S%UaLxA00NTBB>7gfwU9~WiweRf|JHufVY(Ytb#YCbo)}skeL@#+6 zE@Myu8MgPT$1o-aGA;vnuqcycb0fIKUizN3uEsHP0NyQgxvy6AR zl9T@pL)Wd6qoOYFR;p<^#mAd#ijZpun!_70 zU6iVETl6Iz-OnxaE&TLZkc?`JR1cmA`k z`Fz>8-%kE<{rq6s(W`}|I$z}u5vTBA7g>;-oLBCxz>X+)O$H@$UZh44INkSnPg`}t z>8D4p?pm1!fAAM?y?C&NqHpZ?E#-5az_HE*>A^?cPne<;?a&8vZ72xi5m0fY>%va~ zTvPMBM0>6NMT9HIYq3n)L5E3`oZ;}`mfIuPd}f-u>ni%__NdfDW`^0!s!-zgUA$0t zmZR&MNY(b3hFf=z_sp8a(Dpq-es^B5>noXO+vDaByYpjbUMcKsPY{KA=$WqT%CbjB z&~boOfn0zBrWR?N6@~l%D0{D{rrNe`cg{4D&_eGJdJ#1Aj-g4{P?RDl2qGXzKvY1` z&^v@89SproC?ZM=h=QO9=tCC+qJmh0q5@)`KkvJ~^^JdwwY7G#m5n4DGxvR6$9W!! z#M7sY@KC$#QCOw;dvV^Ha|{ctP=x1@0gi#Pn=7Bt2B zx*T`^rH)imRT|rfAY7STwCb%A-9>L(ZsgCt)QukbSY6x8bu^4UWQf&Ji6}A zlSxOW{y97Tz4A;&LdX?JrpPjXsO>}J*tBGB)7f)_diheoCDBs%dDZq#c?9`VW7FXW zy_XNC{v$>IbNCU@{b)Mn=Hnwz+Io4Zt^oD7Fmd_#M#kxP;@XE!!@0h z@*#k-FCr<`Rg@NeA$~x=Ks`7A2YCU`>A*{Yj*GM16=KTz-Mh|veXf)FTK=-P=HIg- zc)&`0;3%r=X41)#-PioIpZegfSV`8!pW+XCOU-wy?(S33;dW937kO;X*;reYo1$COp%iN-t#VPC2QV>Tz*-7Rk6nv<(G{bIb=1MAAQ_|y znYijR$vMPR0@DhP+AeWbN!Xvr=KE(zP5=)>I_+9i8G;mUO>#vFTk4V|hT=O~nk$%n)kAp0bdHb4gP6Hp!O7B$SS*5L8 zsvGvKz^XPy;fhqXGNIHO-F$ZVgbZwmbx;F7d{X2;EA`MW4LF8jWf^c2#e&4+(G zBGG+I(RoYc*roM}{t z5S4RD?qc2KiBMP^lO*U?(7VTtEG8Kw0krV+m081RO{HQa!FfYERl|IwyXfJ?!s?E^ zYv#KDOgm3*DyqB^DboiwADoS}Nus#tMp(yUFXYE=o!F{PJf>svNlR499oVz7cv4%o zU}n)JZ?bsJkzNPAvWNUbf{w>SPxq)M&XsH9L2ji2ooQ}8RQ8g9$!eF0TAc;n(L)H% zP8u=h4=msCEnNN)FKUxQSxfk~m9-g28nQ`UC@i~StQdHEEb#WXu^Y#Johzbf z5HC`Uv{2|ry0jG3(|HsdBZ`cxqRE)N(O2vB13urds~~%Fs_0G@+~9a*o|x|`cM!|a zQurZ{5@sG;yeh)|bnkpJk9Y5)tyqBYNias|;35n-H%BC-NV^TmdHtT@v+%fX`>57_ zsrKYSEkU%-$)L`~qwY*}om*+0$D=yWrMhzmb>5=&7YyqCJnH?U>jO&bgC5lfH={4R zva|Z5u9RLc9z&m0KXrWKmX9nD!LKSttVwxIT6EW#r5U9tu>VCi{Kgl2B|}27S1(?G z+*IJqD@AdV*zzaP?9&b3=%5{;0V56A(VB{>O;XJ;8=|l-0SvkX-6b^kkQ<+4$P9WT z*;e5!0RKjADNJwbro*JBF)S;?h)i>BG>X=Ys*Hv;1qq*D5cZD*LT%0Y>BYI&Hs&as z;-W!}fI-`E3h;;65`$2kxDkh(Mna<6KA}-B8c-N4sLp77^<8>x-7&daH#!x?g9DD2 z8ay3`P#?gX!%@H91NJjQGs7aWk6ZEq&=nLeDh1aQqK`fT#i&3oxmBPKRFDRQ4FMrB z6bBXj{D9?WX>wNp1T#8vNF6G6&60h<)NrR5tw}|!GcyHt+oLO&*hQ=EC}x0)cCE>| z1()}lhbiUVpA<5pPis$ecQ27%qFMB(5&K?u9vC@D;A6PlNB1V{V()LEQ4jZWAVgL7 zNkK0LB8bFR4FwbkY=Kn76^t~7gt$ybgaTs9Bo@hnxW-^==M$Tb;n_lNYK0j-2x3V1 zCL%831w}+rXX(%g5*rTB7E0qs&=A2HYOk#+`qPyLxfc{z*EopXi(JxzkuWi);-XN$?zDI=QP6Er-h5a zW_5Kqdm8RfM|xsxnqP6XxuS{=5GqVw=$%<0h>nvix5%~=j6Z@pOF@WGd-zBQng5oG zDKj2w;2vvuAK86}h}Zx?Vp9-x`t{TM8_P4)f*! z+&P3FKk{?T9H372`IN)_%bTl9VLdD_g5A?slaWEeeZi{DZuYG#SI_eU@O~NUadYz` zssecCKo?C0I!LVS(%|@b|G0m<8#lXkaqeg2OO=)a!ZSfkMqE>de{VOlELkx1Sq8_c zK}Vr%Q9uRT&O+`YiC~cdE6DRmrWJuB*X9wMtnwjOh=3L_+1by-aT9gc8?pO}%L@aM zXCTDD=Van@X8k);+sDIrQ|NFoN&-9Zc^Pr&O6M(>_y4P>d1u5oK9eyf<9*> z4wLC(BG^fP0>VUMq}&{OnZ)Lg3CkfiwH_is3jCCKN4fcnJGh51DttR0f%Rq$Vn$!J zwmfiRJ5l~>@R5vdEJ~6HWBHp%3Quzh<7=AD>xa`Dhfl)WrneaV#e}&_SyNa3&aIa- z`(xCaw`ec7Nb><%0}&fdF>mG~VBID7G114ubIL(gheqwu3L*|YH|Fw%2#aKCl+-|S zYB0)J-;rN<$x6f|)3#-hmQmz@irqHy!Wy`FiFJJjB59U+-jM9eDC@t-c5&cw%;}e^ zyoA5{M!0_%Gw`FhWiQ4k!GTR2HaEjDSwsb%vqY8^(}#x=!7E)m;;5ICohJ!nbgwsW`-t5{3jkdOqH-7 z&=kOI|6DHAi~aJMXR0DBP?igIcDr0Klg;7{#5V+z+=383L~@Z3LDN0b_CNrMtz&gV zQgY5M1QNuOQIQco8$b)Q=k5;~lPmuKGsHyfov);%|0;I@m{x<_0W3cyYj-C0{an+@*fy@@#oF1!_%P_7zd-NI=cTl7w~Or zV8QV1wcs~H+fQ|O9}V^S`47O*L-R$S5Wjt@^2ygL->kKg0sh-@>z`0O%_y<)1aI5nzv*08ke@jW7Qwr2>wtovQ3^3O8%?+82y( zn;-x7!<-vsI)qlBe-HU&6SBH1sL=l#{nO?A&olp*0_EJlKfR@XT{!;B@BAx2TG5`BP>Ewj_$*l#NAs~E0zD)-B!7pPm`nqsDYH~6)l zT^&4J8GITvpZd+#jttB>psa{vb~u2Y@;0~Kc5QhuclrhC*M7w*yKC97w_XP&yT7-$ zLHit3>9?k})`QfD&iK!uRXZBx@aLcIKmEt-B*je5AO5)?aq!RCh0)N1BW3@W0)_k6 z6Cv!{?9Lqb&Z}=$$)fbrg$`VLG`Kss-}g5qG3MepDy)-4N?}5SnK2tt3Cf@TUe3r4 zOlI7cVpgFtd9d*hn^|m>9+HG1SQj_;jxTKfhmF#=aS!}oHmb?ZCrpHt0Hl{TKblzj zbbuDyR%Y4;sr*-gGP%5bHjXdz>Q!e`eUkZF-}9Bvha7)JacTy!*6z-H1OH*8-q_zv zV=duvod0E`R+Vm{f_<-E{c?+?K=~#~^6urvQD|{6c2T2LT-8VthnPVOQoVXKjsJ*8 zf2w-T(=2hr=tHDN?Rc)7U8zx;M%~06)w7Rc{;NRIy1dk%rr9u6VRZB05T(_~vbSW2 z8mDVD&DPnM8N{Nsn_oA%w0H~z&5(?(U>-^ozmX&?D25Nre77Y|c&>l}vicAq3;^)HA#L)ftkGp(0Mi{Gop za*JA%`g+ylG_F05NqX|0vqS{7Tdz4&4d<{)k+&pt!_%vWO+KUCM!ccCV`BItfw!Xb z_~dgXZxf9KABNkHJ}|((s|Q+-ngqA|Is(7XkLJkq=5S#nWgroWd@|nArg;{&_Y^&- zaX=#Z{xBp_Z|$wD6`^6A7o|!qm)~8~l@fK#yipakT}(YIr){zT(o>Ne zX>bxc^mXC5KP2+RI1dVf1^kOekR(4V@18}7lu}h9n^f@A@i6PBO5=G2y~uaOP*1`$ zr0m9fBxguKZ`JwSUBoj~B4_;B^dsn5%j7&v;LC^<4rS}x3Czq7!#Prs^o`r&b$R}> zyLYT?Ag7GN>g3eBW?#Q$*eTHl+EKNmg(wmRyW&ZjUATfLrjlY|}pqHALrAi#V6^|88%Ysp=zslU! zss2K7doD@?P;zlkkSj;4FZRAIA1`aq1j@z*Qz5{x^wB}Vw2lP(2Zd}7_ueP=0}-s_ zKpKQPTnW$`Qh@}saCO-PpH}Nj9G*ll0vd3cD#ui5t-|SQtypTk$f%_=WOCNk>#@q`Fl#Mc>^YR_Y!ts%pb#Li8RKg<5$U3Sd(iDNHg zeoP(bjKsxRnt$A(Ln- za!VGeK{ibg_p=c7qadLx=pfC2Cn&`ZQvgjc(y%sXO&jwd8zGQ?FQ4KTnvK_TX$Jz8 z9&fV@kX(3VA`d^=omemmk9Pnx+@M^1JfokK%@9EhC)jHO!pe___afd$CI~t5E3P^- zU-;d|ERF_-?WC*j+!f^O7&`a)+ch}VY88#e{+3&h{=`RvE$AYJYE5}GmCO&3xrr=- zD=r>0%)3-XgUH;A4cpr`zF?NLj!GcxuW|Gj4}ooa8EbAcWRPtS|RG^l!2~ zgNBd+S{?S69+K%EPsCK0R~|u`B4m$VKvc*j(s1$d60IS;km9?{%{?@Gp%15VtJk6E z;uzm5np>@v4u4o;tDq`c2KE>};AlmnnghZtW7EePG#8Xoy&okDR`Xf}z(_JrG~=`*Z2*IQC8Mi+$J@+g;tQ?)WzqQQ zNaoXa4nGV5BRdUAouD;b4~Y{1adBGImu)*1Ego6@q*{fXge5_I;qS5Oq=VWH$h!~8aq#4a?waf|G)XbrL7xI8Y@m6JbJ1?>Zbe` z2qibWaZN%yK3C&yNnzZ$w_q|@m@{h2z+19VX{ddjmM>)jS7)rZaZ`3Npn8-^*tu=ha`7IuwHc{ zoLinI%7KPV=-MB7dwBVT0-wxa#%6~Vnl-S6Ne4C?1>H1zo~}{AH+bJ!p$I;_^tRUL zWrFtySya`ydD%72O8Z1)F?IPwDud@re>nGknHb!>8^{VKdaI5*m3P#TrJn?r(sD8PGRJ;nC3V#a7xnV(2>CfY+*YE&% zobkSTQL1dF_60W1Wh@lC6!>H^;Rj;lEu(Yz`ngfa4OW%oC4DC4jF}YK)CK64bH;0{ z(kx#}JIapCtg^o^i(8Wz>Tc$*f^>$*^7Qo%RYv^7OKOTw7+*QA*i)|Rrg6usF9`EO z>^_}~kpO*&$mfb5>RT@1mia;!!o=C;ddIPQ(!+(c4vHer!3F+_8b1A$f5}TuP0}fP zGxWYo$?`dKiR$bARX5Auu)*E0MsMRo9_p&YRM(vk%?vzSZ{(b$ zAxlWA|GyO|O8hWJN^c`hi;?WNnb_ZmQ*?@F6V4oIRASCUWQv5xQZo&#p(13+6V_kr zUM9N6leCwS<()O(sPyZMm;yeFwwZN3AA+zXsbMnTxMhC;L2kOFG61Err5G<{KgxqV zZ$y5M%n{9F=4{O7G$7MJ8!|kQ%)+2hO=R|GWX>%zH!7D$IhW5SS0FG~C@oi{DOc=S zuEbWZ6e>?zIZxImPd+eDF)dHIDeuS@xj>hERQlE(S~NUP_W>Oc_l77?GssZz3obv~ z8&I8wXiS^C6x<{wp^hu_Lb1?KH3iuOAa*!5jQ|m+pya)CDp|;y_nl5WUqnC66d0}7hR8~ey#zpSkT0Szn`P6?QJs&Q&RBoSXy0+i&X$@Vd|EH=CJ`XfrA z8v1=&`psLV&7-AvFz!!&`mTJ0I4^44c27~p86(IL<>~wcdf6*k;Biw?wg#fih4l^f z5QK6)jS7BE5aW&I0!p%@^5duTVPpu?rI-y0(w+&hjN7Ytz-%$)LYVQf8`kP+1qssy z;c2es`bGl=>P^Up!&QB?hU0>_2!SVx2oM(Z=Rk$1lOZSH z!Ot<^zH|{76>@?oCyo1_&0q{HxOxl8Loq289>)R zHW0sniF=8+jH+o)AQZWrKIKqS664DZeWiI~?jE<7#}Vdb)-PtOew&3i2YVo~Ba#O!QvRqhg#!WdfmC zodB^ycWFGXe?#mT=r&ZGL_*&;#PZji{bQ%fO1t|u#_@Ef)9(WjLYrOp#l;%Alg<8$ zw)2%zsY%hL4@0m{%>wi7NW;#HcJ{GKO_8H1zUGz;Q)(8Ldh6M}e++8#Z*oql)TU~- zB@znF4)UHptV^I4=Nr~0FzLVrMk|1+ohL(Vw;{8i{-YdG#@uf#yPt&8sWNL8RZZI5mHX2Vz1)&deh3gAjVdA)aE}Hj?g@?8ylp_9 zNjFK_>f>sxJ4bE37{zI>0=Q3uvj$z~sgSM~c*EJ^hOnVr>YcyroG!a!A|8#ZW}Rt_ zUPxKVpC|o^>;Y|m?4JIy0#rth&m}-G10U%f@g4);MSU8UD3}acbLbWNAF;Y1D(Pv{ zdTy1fhJCAt1Jkkv)KE0ic#(FVBuEzl=*rl$!R6=4Pr`jFZO)=# z4EUyhmuIHzxW_%Hcb#ERvG_DCV3Bqq7v5e5cW7ygFz6dRfcum~6!~gn-T{dI)BH=XI1gdjR4|;%MzNn}0@gjgXXbv$ej&?3lsZ8}h$Jn&zq1kw1Nt zR7StcUiq{CD1LfeU`*yZ_$;8Vh$H$$=<-oBAPUJfU1z2ubS|iHaJxRB zq!31bevUqvPU=plJg+xI_#JkxO9LLbZf_OD1u9$_hhQ06Zso%D(f5*+5f=;^8Ljop zs?2)YC!`0q)<24KeTf6aKlzB6PSBc8_dcG+>Iirp&2TKs255(sZCQqoCYYISkLogIe450$SC^tPj`~Ep7=k>~@Y&OIL z0%TU$#-joPb_91E{U|9`Gh&n(&feM%qZ}T>q$SKkCDu6 zp7{-w%1GDgPv%|9nhR{3yZmA<q15pLsmwrhSCEa!P*DQxVXUhN1r#P4aT5)fDx%Y}qLJ5t)C%wy4p^!HAD9FE zSqsA6EKA#)(Z3K&;z}mr?e7Xu3BSUc;R+K)e>$vWQ6Oh|X%7)*U%|_145jpekfVSU zYu(i4yhybMEWBa)B*^^VMspnOff_8_5oX3Rx8PuAv{fUDk0tR<#T%%+$@&9LP!zHL z>(APQ*!BDB@1#s%;yO!&J5VJG*zxzB@zIU*J^<6$d)<->4Of3>NqA=|xgknSuN1Hr5%5rOTjnUwvzBQFNx`0pS>DHpsLS0gcRz9@m_-mrrQYYPL&upXU&j^%y{ z;3^jo_SA=WdR_GjjE(SC-2Y=dLF|hcEWzX>0uM7IqQjEG8cvuw6)K8>nJtGmmu;8(w8iLFAzr`B#&gQ_W?`y9TD6@F2YyktoM zzr5KX9fhS3_b#>X_?-W#&t#oR2(b5RTUsyI;PjQVp~1CpKkDQxJSFab99)daKIn8n zCh+`c$RC7L?`9%=SAQomK6wS-Fm;oB@GoL@3X$NRAvCp<1H4oHx|m7Xu#@~)F|a3o z=B;Wa)cD?}swC{ZDKK+v^St=4ci9BJlfSsntV^E!nn?h*-o6V5nQD@MMFl_hZ7{cQ zYlU$Gel#tA(ykp88OcgqaYm+K6S)FHFGu==fM;l^zg8$)QskA~#Q#;G{I`d&we4Oz zwGAO6f^I;IRKU2*jnODd*Zs!s5(>A-)B5oVV7#Xi?4G{+{2m`i2f)XRxQpSdR^VQG z|AF~&bL-Rg=T9(m!!O_eUj@paN`#sIAp|XMO{EMcAo)~0$Ej71Q!ui&<<=e5Pcnox zgI2~nYQ}P~LZw7$pGr_9ZNVmh=V9kU2Iq`5DL8;4;>d?LVVaE7%q2QZGFMv&Enl`#bWYL1h z`|p;;UFF0JyK(9%r-F?iy(8_IXc>_Z*AlO=P1kWtRvquz-8V&cRK9Bdu`LB(yE#!F z+gnA7!2vicDHDM5CPe#T7$Ay-knZ^KFi!J{L$9#KNkuP&Q@9n#rukR>Sj}a(&Hvu; zx{h>$kH!55vCY6u1b8R1+dAcQA9#`f%6xA2ozWL;iH7w_##MEve7?7FU0~rHfZt5$JoT&53dG2`g@pcgEOipL>)4h} z;lSXn&V2qk{8&dVDg3DPCmot}zxFW8cCb`!Fjw(a1rr+oB)*zKcz->ZAN6RbYFPx_ zv^(D)Lsgd|X+O#31hr6bt7is*>GEN*dY4^;wNWbQ@z~TAwr5*&qgJBCD`j6YZOvo& zCRARHZM9MecPL|SLl$^;&F45bWrc1`T8aLBX^^S^PdC?v31sbWzhk}jVwZT*vGb##BD!1c=h`{GOY_CJ*0_`3g* z(okaBDAs{DXAj8f{CUcugMQ%AjAs;lQls8m`c!q(3E(#OCSpKKSk(kn^w1c+v)5+U zzf%*jh7h^{65G+TIrPoa)*?5_$JH4LGm5YzTx|6?S#?f$3HHzR-Kzc}Mp z_bB*LjAa1h4`!s{`v_)9^9g%8hIWR7N~%>F7PEFuM+b6nBeg8idOm2jM>2>YYx8?2 zJK!?I)d`=e6h(Y77gU%ehp?_RmctCiFd0}jQKk5A_KqZu0IW!2BuPz!6!+>i1Hzp; z3gyBB985aThcSB zKN6+wH&7@lHY-usfumP99a6rd#e)PuH=2%Pq#ELaDja1h4GPi1j>H^}VgolH#k)@f zTt>cqge!mUaeNs%3}YMVZFW7pS|-HvCXhi4e6!VgFL1*D_s z-)@VNDJ79p>32HM!{tx^z18x!Y4F{4m+ zB&g-b;8at`3+<()=#I{wPbJ7odgD`WIc4#CB5U>hNXeSDPvGfpk40xm1hYnfTlO^6 z*`DT@^Qewr(Lvdn1LPDv%;y6CirN_-%#gFYYwr=>EAFmC?pL(|YDCkOaUNix{}e({ zHOTRY4)}oozA_&%j=fjfj9@{5H@3eIHDKh`a>(z6S!$Ux^0MHLjh57Ae%g~&P z0Um!ivO};3u?F~S13ZZ&KxKj)xn6Kd-?GXf@;TqVfrQIEt<|n42lP84plxEt?T6rN_>d@=?7TJkH!J z_u1E;jg~~<1+3pRwcdcrnvIMueb8kQIp|D%a67f}N5%N1{gmaLX zkb%k(7c{N-^`nltI&+-;rPFQTt5o{F9sZOBt;j;p9}{CmvS43p%~wcr$g;Fj`L@uF z*@gX_pncN7Lwc4b!<220%nW;)jllpp6~PjSQTNh6zBO^O&+(j!c2)~HRCq*(#nLCo z+3^A9HIaBv^w(w)FYEi=?0(odhw6(3fhK9&ogV+G%{;Y0YqHRi1|@g2&a5}wRX;J^#ulgQ?1WO|LF52FB~w|fT#K8U7;{bc|s#odq@aCpO%3lNW7#ic~;MIG_;J((-$ z+Wd)4L&eY`>-qh zfRN;LgG*U1R-ofLVm!SkfZNiQJM2}+gN6TpMT9F0S*v?lbm8oEz3dIvtTr-xvpD-x zZ}#Vf?5}&-4B?#bdO5pF+y&uYTNoX3Dp$ac@lT|nk+0UIHrjYC`3r$ep&#AC@ax3! zY3HMnQNrLp8~H~Llt08cl65X`qmsy@k|aT2)k?!;>v=QVZF3OeLOlR=uP zAn)|CK+sBl8qy3C@;3#phFN(1(1}$S3gj2QZZ2#cC43%1IO`ncgYcsl`^;zr=pXsT11QOq)Y3$+?TDtjyR|n+ZqKqk><}B6VbcoZI}>00 z)RE7wx;S&IxVfwFrG|X@cS&tiDW(cZJeDG!|NU6uqU5-~l;Jxub93atFx$iZlh93oMn_P>Q7-$Bgio$77Anq@=#9pdd<9PA6z3nygxt38(S}5v5Ph zDz|OWO4V%2J`&v}0Lcma;~^GUN1%v$Yc|Lp21Nt{6$_XDbfNOa!@Hf9De=Ewc)#AkBnWfUX=CGT%jWdc4Q1=MO{Yg4M^ELfeo>9t%2{3Tdr7alg3n!0vgsn=U~FXa`6 z)QAO9<-o^^egLFghN(O)Y#xZ8a5T@WCo&+{Oa;P8ISlLk^?mZa*<9lh zwkSqp6b>iit7+4Wd%IX0WQ#ndB6kTZmnAEAi@_F!Z5DbW)zP7(3W497t;_9{u`%N- zT32qGP6}ot@il_>hBegK?DW!!6>!x4SaTpwOL_=9gy0yX#`IQ$G z^6dy`Qiam^arWw90?)ngpxPX7%U?Y-8x&B{EF1a`{W^mC-YGNYcr46Tbzh?${g{m# z4`|w|#^7*wgwZ}#!UNGA`7(l+)N358*|@RQ$1z8&Z_2{s1zBMQU3OqkCenRb655n~ zzgklNPiGiE8D%Cm_l(VRy`_?*agkUrQ(AuU2*1f=4JG|jXj)GUMl0DvVq9HA%e;rs zrSXY}Z4J;oVO|z@S(Bl{|0GGqShM`ZHY!-m3*1tbiPn1U{;)`yKZa5ZHubKkXtulM z*j>{VSU%h8D)s1xNdpoHlfBVIbMh=^q4V)oRNbGBI;yl2Q(8iQdWD0oMszHrna&p7 zk8kR>>bBO>oLXRD(Bl)+N1%gZ`RWE%+2|Pk<|U!fi-g@+^}LfEJ$y>k@gy zNh7O`=SOR~&Wx|oD0Ju+Chr|pI3rpAeDA{y zR_%g<+KXz9=@fgkEeB`plNZj1U^;FpYy)On4!c>-X={X(FGp&>aQ%__VlQR_Mi^ll zJx0a6=668aic3&6Upsigqn^JeaAsZIopvs|RLeMif_NsZpHs2Ir;>4;GrPMG8x@ZcIQghleh&S0M0C5*VzzzY1!uSQRppY4slpzLuAe@QQH zdXAui7gD{@7}ASiclaslqT0%f)09`mUP8IC3l-kL!r}NyhnK9Pz|)7BYB$jCs&>EF zF#SYgxJ00zYM66G-~efuX^fenke}YlI;Z&e7D@d~;jh>c;}y>OlW|Yc+n(@5PV}n% z;>Wec{1NbP|Ens_#ksa1+cz-RY1rxVH*ecISBxIp;GS%G!L!;{v);VeIecv!yXp!+ zzB(XfXfLMpP~Ly9j~b&zh$ny4Kff~1KM{Mua(XUAe&m9~E%L>A&dTTWV*w2_*Vx$R zTgct5!Rq$rSS;<8oy5wgw;v51&cT)=eB=pik<&E8*b#-yi5lw5#lt1E z7hL!2!sNZ7KdqbpNW669oNiY`H^+{+VkFQZaK(F{Ra>prnM((mFBHm=FK$hIL#AB) z0SE!9k;PziG1zWs^zZ3MRV0oEH}hv*kWl(iI{`TM{Dc?{%vD80hzv~!WZlYmxeKGz z3+}|Eft*qk$YZvTWOu~AeWcJqabSnlcZ!l463>-;$Ih2f2|Kv*-7OztGW}g-4LC!e zI(qwu-rXMtLqCk({xJFX2VQE|?D($5`P~z@cdhU4+79j7zui6g?=C^=r_=HO4{ZC5 zSNYG+9wk{2pU+Q)zqTct_@LJe(38(Rl&9I2LnxadQP_O zlR^Zyo{Kc}S(KvbqDWx$B?Yoj8m{p6+OH!JApWII3h)gzsykImgdqF`d;o1Ilr+L&+Ig^BD>K$8{C6xpoIAzfUSv z#Qnl!zb&C`F6PYB8tt(`b*pcA02wyv5(N{y~hh|n(nAide43r%}?;5#Eux+oxS`&tnK!n|Mn0r)8~I{+K8&? zS*alBZiHFWY`~J^qW^rB1> z5pb}(52M)Kb>-8*EX=Z3*h$`Dz2-bh7~cis5duaWrVk#3?Fc!*l}3g0!g_PU({ zL%oqkcP0fA{1B zWQ&}^8#SKU(MwlS^M(-qF+9jBW$r+gMty9u|(Z^MSs8t2-&>~X6wUOz?Jt&MBND(SyY z+pcEg1ZmA2Q}xZCRJUhrgKM8p7+OD=hERk1^b2(>y>6pbRR>>sm3`^yiax^LyK{P6 zq5J(s-8gohji2&G3y&yYuKj*;4}3>ybWf?$Mn-0ORy>3)`;V5Wk1uDdbkBBZEl5>szGs)3QBz%6n~Dzzp*@%8 zYm1mkN$zWlIV;be#u4LmRaKR%KFIayx#MHfYBtLfU8`n&44s=WRv3N$1XQwO6+*~j zssR_bZ}d#*%*pI5!Ztj+Umlg450lI9B0S_cL`yd1-(J>;es3u>a6ooE1-yBYTkyLh zP3Pu~+75v$^HneT#uqh{M#p9W$(#BW>+f~AMIuyFGOTrm@HZ6`hPOq^D&{QCUwQk@ z#C%LM2aJ~5+TlDi5xde|mVV`Tm6Zl~Dc5aiAojam_P^ObxxWpvyi}nA+pph8`wyL^ zaI?x0-Y#611LU5KIHMB9GE;vK**Rch%B!aKFnV!zGpd3e`IhW%81TS?7F3&OnziA3 z-|r#8TEj06!JXTG*?K*&IQ-l`Q!C?9iHhT|w2W*L!dMPX^eB>boZYyJcT;6BQ+@wb zt(5W)^zt0TFTa{;8P_$BRm)8`*DB~HR1?&;%x+Z4eP5+KKFYueYRc3IB`ipF zC^sI@{Zl*DDlo7k%(#`;{RHBu-Io1u(z+{gMhXhEb8hB6Szz=Qa85hwWX5~WHe+Ve zUclH{AJy+A`EChJt{_OAtbc;1&VT#q!rRgzDvYuzeb%jZ& zwvyoe&o%LAk9PAa=ghJ0mnNs*pK=Bxg2R+ckBRLME=cc|2ly(0+%^l zuOG>pEx3eIdwcD56!NuCdTt8ll7LNsdYxm2QCN5Jq~9>yh%Sv*D^^r>``J~LJC>}a zT>+!(0Izb{Y;>G!;CJgzXh49L_nJcXfmLG%O+1A-jf!$>KZAqfsbax9EilnkmsWqa zqG8Q9F|Dt$(H+m567HN%DZVzM*>UG==Cv&{b>bh54;MOh?)%q%pJ?;pxzd!{Z^IHI?nU!BR1RL z)q=y~8d@aUfsPkXLgHqY&dD`An!QM_Y7}GtDmfpmNOs}Vbv?IT6Pe0bID(BIo`V-(krBRhJTy&0NVd)`!rSt!@hNy9XY)x$=`{I zS=KO%+0z-Xp3H&WGh`24@=fgLJn=c*FjG)AWYjgh$RjZ9y)xhU1S%e}D!9{zSq zfi}Zml`q@RJB#b`$o$@H(TRxoRQg20L#CQP@CAo|hi>5G7cy#Dzp7v-Us{)O4~_KC zN^U&eY*e@MNl0MTFQK1!yDeAR={$#Rwph%2KG1W=(xAH1Dt-Hn&{qjLZKTRt&yyI$ zU*?uO`t{$M2U;<=D_sL`4+baq@$^WGvh_<}3SN-w6;FDj@|^wI%yk z{YR5qw^Gp&I%AGc@~eBI25e_D)Y;oeM#*i4=sUtF;Z(Y`jx+=lr)C3saCUoWC-vrA z_0+Yk$zUTjhu=1(Ews`j>4$8q@=E@1UeTXxz4n(}iy#8d4YucEPi9CbB^Jf=vH#SS zrGGttH;`6Z9DFFwL)O#O4?CqjH2!tt!nJes5Rr=-NlaAAlUtvy^OL5s3txR{krk8_ zxs8ZFIs1V$;n2@Ux1+%qmakWN5`8JT)53rJEK6=w{i9Iz*{Q|QBDG5^-q3in-h=+$ zBqm&5h0_aFj@C0M2z_DGO%f?6Iu6Rt)Q^(SJF=$Yf zbg{A4n2@8P&}5o9`Y4GESasESJn@rKD6x!DO6nkiV@YQF>2ahQASC8SEi9_h@XVA- zJc;D}RXJ)s0=Fn>^sZM{NI8}Lj8A8;Taq+Vim{tq z!yH0`57SHhbfPXO86iW&Rg*bnPWc=CmD2cYqTl%}&ePV8<hj1XOJ=_4tvVHS0Q_mtE{#4~5gteI;6DRlNv)o(0S zq~8f7{UW)??7Pt3ns?Pld^3^l@pqrPifA%LUUg(2kr3i|7vyGpitpl0Mq0BM8x-(V zj+@7w>~-_Ah!kr?iKT7O)#4HZqI)Wjt4XkU;d_4B#!U1Nf93#oA9cP@Z%P9Tz=5>l zach8hrcD2CS+I>_HgkD_OnH%6`OV<+(#-Pmd*zig<+n8XR(Hy4SMiTixZG<(8KZuL z5>k@Fe}E5iGWPcF_6gjt_@P``H^aWa<*S_px4|fKk#%hM5r^nhlQMxbK~;S-JoieB z3hRrBqY{CVaqifvC~kmZQA{Vpo-s3jQ#v#J25?_7P<$R{-{YPm3Rp^N`UcZ;m!mM7 zNJs+ui>r z{&iW8#-xAXtJ8zMt4s}@F{owu9s%+#5=lpwq#70vfG~9lTY$d(?b(YN{pL4@#Pm8} zoU3dcKaKAOA3;;ku@o+nR;O7a*WvpdYY|e|{3LbOG(FWI+ViUH?vgOstzg0C7 zSF_&mW`=y%d#%=k)z2DUQ386)-ybzNI|W(XvA_3P!QwVh4{z5b@ zC;tgA0qb**qY_!!A>*-%r0Ab}14cQ;m5xVMJ_QOw>++^rZuesWGrn6}MmK%#Aurt< ze6c3?#^>tUd&8fST33({5t5z{-pMPVujKMSfB2#0;im+C5WZ{|`G}s{_dT0wKlBmQ z_)$i}qd!Qm@0Coy=N^HEJpcLh=unQrwCnLp&H*t`d2@#XU#D=$3uahQkn$rZj|C1a zD7^C{L;DmV)M(%Sh{*ZT&LpNd8r-&fL}GsQfzqe~YV1z!=z+kPnhyWzurW;?zF*m+ zTDxO~Nn_{a$Io(%8-$H(*o<&r8@E{J`Z_m$A&ebL8@E0`;Se@)F=xWLb;5Oi!hLtb z6E*2AKk0jZ(m!l6FlREjbux5*^3v|)71UI?{8Z%mscgP~H--5Ch9UDGq}e6!Kz~c` zz+m4{wm|Pom%Ptn6;;*#bp!H@Cjbe^_<#3io@87s|4VNs@Bi>-a!bieOG~S(t7A`} zHv0eK&9spJPj9BOxjn<1Dd*tF@MbzXI{p`LX5_!Unbz(B`TxJAnf7^(zBO)_Cq4cj zq?vJLO3ulyvHy~01~uPgcr%^vbq4o#yX9B@Tb+4nY&>|d_h0JF(*GCg%=(W1yE^mP z)BmB)r2pOj{^j4^OfF(Fkuy0hB{efMEh8s8os^Q7Uq~v>E-Nc9tSsQF&MK)*<)|yV zRdTzuzN)pkskx!?K}Qd{vzkM3NI~)8qmhw^l(FH-$??&d`PupDS<2G%<7bNt%g-j3 z*GE@ZM(%RG-X^|%^X|jWr}v*fe%bx{ZU12J$M>IyM}L0*{q@f=@Ed80_c{ms?@&I2 zEJ3r5h8c!8v)OH?;|>Gm^PR0S>%9B8QX}%?`b=lz;%ycPAY|UfK>19IWZh@4e#mXK zt~bAB-relbWZ4uRIVaHPZ2k#V~Zl$v`0=cI|tf9BBA^YjHTK)L_n=ZW9G0X)ZNiuZ;RNIa>DMCa!YpNs{%v zH5>xq_NMOLo5Z@_1se7~Uh$v*O}c;cIUI;@{37zMV_sc*{RX!^M!_D0v4#LeHfc4) z8Kt9uD#dwb0#p&RU2~Iz_(@9tM08iS{y{K+<2Mwp^bqJ0G4#AN;PG-w@Ss0@N?7Ly zhY9$APM|jJ{SY}lY^0u2Ex<+p#S%*Xw6(Q2bQqGe9e;mRwgt?2m`x>_7VhrO%J<5b zI8+;jCSASdonX*yb8qHSxq}+7u)eY(wgRevQB6XnDLlQbZ*sv4Fo_qn-xOA!COlwA z{CdtbAx+P=ezfO}7Z-*m%W}szC=X$q9G0`Y$In___0zZe`c@s-o7f-KkF@hs-h_Ys z{Ee1!vYLB-L-Ocp(yRzTsW^jSimO~p>^i7cb_({79rV-P>N_X)R1?W>iHq0Y`L&-e z-1?P3ZT_VgEE{ueCRi%9HuqTYl5V z@!$-IDyKEPwa#b?pQrnoM=_|A)uGtlusY9v6E?~5w+662yw(oe#JL+rkgh#V;H|_X z5-E{paM(pn?_GLtdmV@44>M8kP7;X@dE*%`sSkk6Wklyby)tmaw`3?h@GJRd!}Q2x zl(T{??q^#SIUfjNtQERu381%I>%{WLgAKTR^!g2_3?d(20UJRmDJZr3LM|yVGdoiu z{jys2Uw4@#0SB;ScRHAwt!_PV>+{vX>Xlv4ISwd=(;Fa2>ZTB`@Onax4GCJuBWIcS zEeoI^0;I$Sj=|vg2;yn+pql*qDjZgiC{nz%1DFd z*&zZ+^m?)C)wg1g_F$>@PfteAFle@2Tj`i-qTStZqWhuK4OVZ{Px^U>B1A9~dv}^z zw%B4=TkYdBoUo1{uacXbRR&$pD|%0aCETsByu^=_F&eHRHY)R8uVdB=R)!YzHroqM z{+y1e=&ZVG%|z^%aRj zgiZQ`;iB1cMIru{hW~roXcG^(3kQ}#W3GgmKdp;D-Dr9zYs-qlwAl@-tSKzDX*8!h zlu8^n-)?Po?45mfKOWlRblB`PW&XTFw;?USvc=`a?DL+1!!~^GCvPZOBnvk!#n87C$Kq=S-)TG*H=Uva#4BBu8^Q zPo0#mNZp-DV@xDJGl5Oab@ll`bO+Dgd3~R3$JExKP9!rS@G;CKfAh3xZ!Wsp>WqlC zj9)MJ$IqdqbL+iNcwAo)P4QgHIj?`~TPN7Q(7=ek9G|TbQA9VzP~LzQZ`xyB3Sa%n zlY=~0|2e!T(E^LubIWkE0ymDG9=tx+c;Zs;^-ni5uAk(T0?HQLnmFuh0lX$Xt&5Pc zpG!^|uE0dR{28cFMhPNFYc)Jm>)%w6H@J&zYGieK^xHqltKtU3W5CG+wCV%(4Q^+%me)D^o7~|%_bB%XgDX*hgh|e`;zPBgG!IUH> z{wU?>NaS3U{0$Q>(Gy5u2I--kF|aF!xbW*SUeYZ$ROj_=j!PM5R9msY-On`zZb5J) zeEGpPDMIM+N5_P()v%0KU8#tRM+%N&?etTp-5!7PuyX|3+zvUeeE#G^7ZAAL`NI^% zAHN%*{b!Y$*VEN#`8mY(&&!pCo}S*vpD!o;S);M__DxxSiKzUuzGKxp@Z#~8=)pf5 zdwIP>?=8Q^ul?CPTIhZF^YPc~fBw7z*!w6Q&4TxSfH`zgghYM|2%gr_|498 zQ?|36x<3cBw?T%|qnlEvE`pD6+t*7Gt5TML2(cwXE+fkJ5#?8iibq5SzNbvrNLF=9R*y~AC`;DrOV(LQ);&tb z@uui&q!>D-7{{iVmZg~YrJP?$u{uhz=1sNLNS${G<<mSIMlW9YoGD8k0= zZ%SIi6A49Q9})+*maPI4B|NJMEjSg9An}R)aAoz*Xwfh?TQ*PQ4n6zaHRe#aKMj5R z=p4p23nL0}*}D0cNz4Rg?%d2uev&mj5kRlw4UGGSB#Hnbv95f!K)R9PD{07btm-hy zJ@K2TO9%P{Ri9bU*D)IMG#tW`WX3E49Pj8K9Pw$A1*J{~?bW-d6?!!J`3weRUY+)8 zuvh#GW04xodmEMhKEo?{RN@iUz0Ka^Ehq3U%7gF(nWkJ==btySr^>~gU-JV~u#$Tv zEfaEA0)|s8k2U|Kr~2oufe=sbmkh&yZU$}J2|?@fR|+9-zU%+lN&9EInCkC;FfDR9 z+Kncv$o{;@bX>wefVcK2n$t{i>zijIthl7?CQQ7RezXWRnXMJ< zrQMbD`&nTcF_UczEGto@#G@(zr-wA2P{XN1w>v!w;=C7R{5Skv4c`di-uY`kO@C!}Zf`1k#v4>* zR&9F^-Cc(MN5d20U5=(NfsZdAR!bUCvMTYxmvWU9ptp1cUEWAusO&s7^F^U>@adaS0rLwoEfKF^De_& z9>X0n>6I3)N>5Cxh|{RK?r5tAt$CFtb?&3c-|-7v?GFye z(R7w`%?L7!_pL*_=EW5>l=k2quNIg}I+_g?2;qc~q<+eBj=(#-MGBRXoC*oSi8h@w zNMDL0S+F2X!3NN+jI87wC=9?!D^TYi$9ND&=?v=5(4Si){g7 zC+LFeA?=zXfB=C@0M{2i#~B;n%0ucRU4^(#aY(-82s3RID*)q3y~^I;yG)$bavZDx z)9nNfFd0xW;$-LvNuivKj(EBSN0S8ym;^N?_i=zKklG~Cr2#gZ{!>Z)qP5^~+8~1@ zzkuVMmK%se_wg-(PT@IQ61c#4=shF{1L!fsa_Q7&MwzIe;Yf zA=?2Yd7!J8f&8E$gp(3FW2)=cn(JeKO-D7|hSTN78%;<5K!&*rpla8kv_I%G*x;ga z!KdC39(BIiaFuO42qbd?F~av634CudoA#cF9k^PQ)abU3_IJw<3~MbFY5b?@(Z|eU zuo(%h2e^}%LP<=JDsWT{Jd6zIdJCks!moHq%aWKFGv~*D&{8BOtToe(^Tr?&I21P> z3Mea+;6c`E3oU3bEF_G?q`Wuv#T#%37|$pnp22I~YydJ0PniKxf#R^4Vibn}BOLAp zHNp3(?G6jmK<$Ho33}dyG}iJ7#OQ;YW4P&H+VE)A7(jw9wL;Blb93_Z>3;@V3m_dts*)`gRB~CqOqtM;YGGkz>$wYac>s*k&DFm<@b4 zwJHj3Md-C|A7mjdr_RNg6**$`+o?-8sfwzP*z}eXvWmZV7n`ouRrNQ<$-1KcqFpI) z@%nxy8W8Fw?@EK~FTp4_b5_q_94H{GWiHfO+!?3D>cw;#23Ji~t#MO(Jb-o~!}+MN zTUBtQC$J!#vMexnTW3z28*-(l41}FIr=WcW;4rgZ@N}AI#MMus7k=cR={i&s0u(}6 z)GvU_tb<;yfs6?f0u=fHyEil-SK@)(qA=-20xKYZAAF!a&wv`QyFdS{v6#}fVq(3J z#|lhTL8srT6?LnVks(pY#L0$SDs}0lLxS50hx`3m3H^42ca_ATdZnftG+Z7?xIk+1p8MBS^ex;+6%fC9If z9NTT?+Ww*va2y&?qHGRSfp#vz?XBLvF#uHerUI=uzJ1;p=G?eYjkck0aMr@^L*Vzt zp2?Bce45J1g2wX3r@v_ID`0>oU0=F$ha4(CYpVg2zHMif3kfg{oCHFLolH>s|F7(HwA zdNmz$&&2lx+Fhj@t(Avvv@9b_@R6f-+qr%NPcqv{1P$oS(wShh z>`Ln&g*If#yAL2trVP7mEzEEGGeCuj;6HCagxzDSTv1*N6y!BObR0tFc3H4fs1F!rIpE)PPo%8`kG6i+0bMFcIQ{Fn0^+ET@l+6Q}>aeeq zF%Yo18GL;+4h@C^aD)6)F6?*pMJTw4Q;VD0OMlVIIv;EDUg(Rg2vpM_ziOc|*S;V= ze!lbvw7xsX6|q{y_9E>Is9tft_{$!|^XTL8`;4zNL;=*8`ty}GP%-_}-w&>Wo_M`h z9lp*7srz)aBRG~?Ec*4b)d-TQ~O?sEhb z>@e|s$vm8Pg&qe?Gm*bU(O>+MpI32s{9$NsNB%{|gVE8P_XGf-)?O{%4(G=7O$Rlk zT)jFDU}{vE2~9^fWnBeMd~pZuI|v!GV3{&zvKM!-Dp?v&w`bJUkhG?*mM)PMulIK| zEZoAb(ecfAi9WWG_rK2y5FrLc~bMUc_ zC@}S$f!2t_l`Art)W)EkZ*MxjQ`7`-n!E6H&=1?-zeYOKqB(Y z{q_ENJ+9KGC(uz^ zUH`%I>E>#6e|*;Zzh(K(<>~Z)dplpLeS_`nz`=*7Ev}F9&JO z_RZH-PrJ<|e2ucH!cNcdE3A#H^DDBlT7T@=~>8R+)%xT7JyM5E+`iB>Bd`V^j zTC@%nYmq#dZc>+m-Kl4@!Jz7F0U}#Y14+>w9cq z%@uqyYZj(ix<1V#OGYeH6hDS#TK7uAyhivKXcPuyHP>p!`i_b6Y~$venYt=M+JYU? zAoX7>Ouk(?MbY0&-%A;{KF4=azfkreFXf?DyUo4;KQTn)y3I^a^g!~Kg)0ku` zBV;62!)J?0Oo-kxFLgzUru|9wQyZnXMO`Z*plOTvt{kaaX)sNeT5LVVe*wS| z_@b+7feS7an@N=M4a-&rGKd*dmhroVI@cQ%exx8lQ5riVB_y*1w=)-4Qx>u=p9h=! z^$|pGY6Q*E;ts6yKmlYWO{?HtTz{853Nx}YLsqx|<=|%itpI&0@>793A~t)o7fbGn z7s%;1WzrE=kx&wNM@JnRG=hv&xs@QseGc zslUbPsCN?epuetAfbogm0IETLb2aAllFB&6QU?+8sgZZuN)pHDnF^_9?s5`y70-|G zE`Lf=;iW;Pa&W1=(?qOWpM0}|LE3Z>Aoz4LV@Iiu&CxIIhxL9^PMAK25PIUzXlaTz zk3qCX2V5Y3DV56M3%w}aAYy_+$cGeUt4fdYA2S)dKD!V}QiZe1-J3KzF5uHY&fvU` znDxfIE)wSO-2Kv-Ysn+VO1uUax#gwr)8GXUrQ*c1{lVZu)*B_Q-u$l21p1NMSOzNO zwTU9{L-w6^-Yes24AmafpA&B&7pLn)PGd5l=m@BocpA$les0#^iqB6cjc=(Bp>T}@ zoQ3t0FIt)rx$JMaAz+xkE0gg&4tt{5)R?DeYr&_O$}8AUf%6imEbiV=x~(zFh1be{ z2?tl9RiHLy=FEAL(~iI2hOqReoslL2yKnp;?n|fi_R@(RI2q19Clj$gVm4CRkDRCX zL|9q0aRE(17}s3z*~8WWa)kE{?P$)ITTFUJaFdnJ!W){Od3{_YmDKSt=)k3WyGgi{ z>r_jByiL<3@sKGD39eDKB?sb7;wnjUoCZ-q0n=lAc@;&x^z9LpKegFeK^??%%^%`g zRq+x*16LfSgeU}k^gM-Joi>l|C~j-@KmAFhh2NkvDwCqi=}gFww*z*)aY1~0x;#25 zvRsr;3M|;?AzeTC>9lmHD8YHfkN_LM#X$qWL>(sUYJLP?Rt zdUHaozktgqoP1%PuO>s{4oS2jO(Q4^$JJgeemkoGgXf{9ERBO>tDA%lpac&kw^ zih`IZcI}oGW(FWAi3Jd7uJTC`2#)yPkdmTk**|-K;&e9OmLE>!SEBMt3&xL}#!@t#QJf~z6lQ--TnAdUl`0aSiB0|3k~p6ZS7RSc8r*`KjsIG~br1?10@ zP|g9NNaqP8gN2;<`M_RDb;Aj7ZaqDUA*zx2_=P?I^Q#44-JuF*!w8ue71r;JDHZQVJF{*S@^Ki2I6sOI%{FZ}Ej!s!P- z$J&G5@{@Qr4S)0;-1|H(#0#*VOagEgtg)#?f@jhsLdrO)7Yo{sCW<)vjb8NSK;O7I z1%D$E3T>4jOePm^ivE=S}6#yjSD&`Sqk)0jC6@P}f2 z)qh@Z2#TnQy;6Ua_S@*n<>>TVXObk+Gr_n^(J>K3qbP-);OPw4i467_V~+5^^bV(M zO|gDSys2z48QJ?_%_fxR6j+gxrwF7H-zA^Xvyg5iJUpWgUU3Scd0c%T5{jee8%u(I z_rYaN86%3A07UFG8FZckwV=Aqpo4SJjJ-x9uotP%-wSfjvu`Iv?8miW9@20?0ln#} zs5Gg#F|EfWlq#9Go0fWjAz)7?*EYrnYt)ar898oFjwo+g01Q{MKW;sJAI zyG&)LS>?QK6Rg?^_qz?dD2QZ0{5p34*kkoWarn7NR zrLL3u90~3(fq+qASI~}6;+$2<#X0y}vuMk4Yug+$=oNEyfCNaHQk_lKoW+}sW35lw zn11GS9-L9zce0wK0T0E`HbViIhT8@H_FNdqbIs~rFPsXlibyeMs&GA2ar`G3r9_4+ z*VrT()|SCQ?#Za{b=B)h0e0bn+>aRNRPL0BccQSxLr1%h6>Q|x z*bJwo4|=I@?*wMu4Q{?0I(zrh$Gc~^RIj+?sRDTuxVngt*pjiT8ESoOmhWJH>h{x` z>srpQ%fSPxb$1zfoP@EYb>nHRrtIGr2k&vqkQci-Ecdr$?{|Yzt@!x!exZ6o zc-Tk{FBlqChTIZeF%5vw3{wLM`~;w9u2Q1E*WVwf2A3^|u1x2Nu4ciE_rleQ|J40*d>SuH+!f2@CI=LChp;D((>s zrd)F{>aNpy$6n1lKUH#LP$~j|B7t3V)<`}9DZfWf^6r}RiZmHSIN`$junz!Q*O?@k z`3@H=7M|FJlEA{X{J?Ii-A~Xx^VIt$B`yMuHJ?`4P5D8}c>B8pD&!~=Gwo94JwmT3 zvobn}Gr${!0fKn_IZTJNgs|P8JjXdUogQGD38xHX-Wcwyn5ShyReTZz)Hr32?AbPJ+8 zd@!BRNgePXa#R6=1P2FM$th6^CQ#A$i8+W5jnGcQ0(Z&Qzz~SdRh?H*a`Khlz zntC%XYNjCHS-9mMy2OX7gvbS%sf;lnkB(y=<={q2eO*7@oe^CL<)nsQ`lFkWO;M{t z{YyKG4yri@d?PjcqGrKVFiPa%Bb_K>kYDVdYM58^{5(51Dv~JCb@r~oYXLt7ttl-z zCUSljiJE&tn06zBRrki{nsOM%5~(_t?7g?Z$JAYs9B z4wl;k7SD$HkwJcLfCmNC_6K%=rH&E0Wk7H*9J5o+;tx%@wIAxs?idlh#MQR=Da_k! zXj~PTo+X1nv@VPrbHo?h^Bb4+-kixdAMM*4QS+U7Dj2F8JNvV;ekNy_cvnZ6>cXUB zb*lwkeXj=a=2W@#NZ);gqsODyDI4YesLw49E93NPH#m0imNGdvXl1tVTGjlu=2;BH zsH1<}>*<%s;T%G@l^a+I2hYM%85?pcFTu9 zv7H-oqAVc(PLkH!A7NLES*MSWVIE`M!lA>mmsSPogw?B-@aRP3VkHW+(dC1Ke3zZ) z6j<)V^^zZViH<$P4I_drgRt8@(6whNcMW={UCC8y{t9cik~Q^vJS@-pUA?=uc&&Ff zvU!y!$PBhz{d{BXm&rNv@*&cNzCKl0n@ zy&*!haWs~k@vc~hTnd}Q0u8Ii()xM9$+~S7SKMtH-erowa*kr!rvMYKh@YOE6RU0}~ za~UFd`HS*Z$uFp#Rzz3!LOTZdWe&6_EO=Ef{NVo#3V;8Y2Kyx0eVC&`-Q0CUUVW_y zgdD@b1eilIEZl=u^tju;inc6FM=o7Q$ztKCEr16OPrUw~4fnzg`&DKyqfYxX{o3H~ zg?GJ#myQN|8=D<1Mk8Q+UvFZS_?Lhkmo?S;8f3*j+qH)$*7JV(*^DRp&HRYcES{6q z`PO0mVc_pR_HXsZ<7f4{R-8krn~$Gji*NDgf_8bV1SA_hLz`PxE#a$FiXK6lYTgO)f*td?J$43-QgctEqovww`iAt=tr28 zz^@R2j=nn`A1{F;Z+)?KRlBMSPt4D9TKk!lbNG?9C$M#b&3&>L{X^`}w3AN9$HYT_ zw?p==iNgG&{MNk>^M}s#e-4|%zVSHVn@|QI)NjAE`)90FxIEe4+`@nU?fC#k9`^#? zwEeC!?y+%Q_EB@uAL~so{IMleadAvD>ebJr3&#`eTasRby`kWumSaa4C@TQq_@g^@ z<#;0hSd#LBL8s5G>Bxteog6+s2m!C;{Y_d7l(D9ZkNZgM1#c`0FP|>WLI15A^Km9T zar}Pl%HQ4k3N?>HC<4hTscGpMnOWI6xq1JkQD0G62?JmX998uEDhZbGROlnMaZ<)7Ca0!nX6LdLl@++=8x$2d!B0A%)hp{HRuATlUZ{t! zA6@D7?H3<*KmRLI{~zAW{ZBuC|2h6k{|A8lA9yqW4`5qdGRuE~ZM*I*|0itwti|bn z!nRpL77W<7Gw45ITl|~ZTNb_dHwI(Bf83bsJ*@=hQ$&P4(;pE9E041JOc0F-rZC*m zt@GthAYnu7)kq8!(ZIwndb`% z@%v&-$arsZI>Q=IKhU54X8!oLN_^rVM~VR}4Utw1whDel8#8!W3!1thTq|&p@QAtJ(6g)7RJdj$U13EI*sFT*iQt zpd9NwBk8X|RDuvQnr)+&eIAp7Hb8JdfhyRN7>C}j zF@?<#-7W^N+Q%9e8iDtKVqGwXhQ9E-Zw)efHZ!@H{}=~l;}5D?5vj?{977^p$|X3o zP<8eBhQxaT<$?VAIOM$<3`7>*)jr7|=VwX~N|{tQg~VBt*col>+DQSFdc&E@|@pYHg&0~L01%n$d-+F#L0_7sn&48>pjn5{MAjQtvbA)7owgyI(*XCwMJ>0 z=Q4v?j;VM!D<}zpBM_hBVAJ9gyvEmDiFe=kF4cF6w%dwqg zk01v^HKt9cc&v8C;C#F2@zQ_Hb=s$LTCra+QrnD|yA*75QwHAtj3_F%o0sr7`Krm* zu;E&&bBcO(Bf{$fXDx_yOJX-<65wtH1%`vMpen}z>Om=3SZbtfIP01qeU3E^g@bBq zF+h`v0QffBl=KyMrOq$yJT4ex?mE8yp;J!RLAfw9P6=QV9satT~H`` z)Hm<11Yr7mRt+eUnjagrxp-Fc8PiFnjEzjP+j@A0{pQzBl&n5vQ=k3G#N6t}e9)cj z-*h)2m&B=Rjb5Rwgpl1M&X+t?W3%JQY*+?2-}jw>nm*F%suGG(8cTy| zXEc3P5d8@Gz|Q0Z+p<`9TOaFwfOwoT1WyKBoyG(V$C@5xnuezwJ-_FMCUC9PG65@K zLEgYSiWFQNuY7h+$0XvE_=jY&_Bbg8k^;D~0eqo(`FO0PJzatskrnKM*FDtY$~7~O z9IQ>+?CLkJhGp0|NI(IdwUg%uHY>*)>9cgzsYrdtR)!`WA;!V+lB z@CtkR*c}Kr3&;G~y@>L(a6t7YbF$au2>U~n2`WBw*%NNZetIL>+n!)obzc?cPmtuE z#X`)5MeoQ-7-H{WGvp6IaPK{X3*oZqt=}Tp-C%`6#c>Y6)mrv=>$~h-RHjqsbJ!E4 zKbXCLdDC67Q*C6|K#-gA9QmY{9lajR{_S@fsG*kq9DpNB!oVE)JM0drVXOIV6#Mv@j070{h23YHpLzG}I-JtlaMl;SeQ!yezqe(*;3rWw$qac|}S ziFkS^I`j^Efu(Ec@6`)RI3&OyWY&W*f+Fq;IMJLj-8guG&U~+s8G?uV9agm_TI4(x z?5j`QSkXm={y}_>Pxc==QBHv_gnhl9{T6y7L)J)mH|)lLV{PdS*wz=!OZ--U;y3rt za^7UoX$|8yJToPOjrw0KimN1HxJ^+OFG6gU;K|eHOhGQNvjMymjoVAWuy5mcb2Lpg z&y+PV)H&nDcz}8c!JwC~pz_vFcJ&fGPGJ2Rf(!k3yM@I&Q0Zyvgz8&`(S^38X7!1@0cIVAN zl(?9ea{7mU7Y0Se$-m8L57E~yPP094P&GO-futAHpMVetw|=|PK>0K5EK1fDkpBIM zKQfl_FYSBBQs(h(Ku2uW)A!4mJ*bN`pm5S>%tE%i7kP2|)QEBAMCpC$>#dkM*8 zHkm+#e<{1@bo4=Z1h^)~VL2g_pd)?6yq%`=3Bxbfl%#7PA3$^i_uC=2yJQN6)B=>hMYke(NKekk4Y`0S~a~#45cHqGY}344LC9W z_;0;?}7XcHlB{w-!= zOFXGhKuaHb_L~^0NJ0-UpT8sVv`&6KU6LOsAN!5DOhnLGMXI1I)6YjTlPr~}Z;`zO zkHbk{@sfxFm>ld?UfLi?-{3`0Vxd&ngEAQ_6Ces_Bs(UJrNEPYytC1e_CCbdVt5cu zY8fUTMS&NAbr@h*R{_(LgPf)5EQ^NRZV^kdI^YFP1xkirXi(mi&gHkuec{B6K>)wG zqcQ%N8~Uu()c6{jRG#1Er(Wrtr2ObW7DcakE^J&n7NpC|a+?Z%%9xG-33VKxCNxMM z4N^r%=U_?lI950vT!5A#E$&@N)K^;8s*hbC}eSND&&d3@#^G$BPkT19{ zGyP&kBk#G20>Op4vZa%fcgwS0jw&c)b6>q?-o1#+D^>L9g8ew5ciD^Awiq#Nr;;Jc z=Yl8D(@3ycGsI^^-p5fz`xh{dSk}e_@QuBB}A29c1#F1{LhRXOY`UPPdL(qeg%M z)-Pt3jkxsh%(Xo)t`qus)%c2Bl37kM-w6JRs>6cNvIVzk@r~BEzx+x|r!vd}w{N_@ zorwk(F{dG#2=+ZGxu81k-!jEMc*mqX@9#<+6 zBC3d&gI3%&svt?bsGTrBg(|<3`+u?bovO+x)6GY&^v_QCG?J=D9wV1R0{$sAjZw}KWBH(nLRsuUhJIN7n}EYCUaji zS3YxH-{1EGFXZhgIgkVqJiK7|!e^OM89&d{ocN^JMeG!4VmSrs5_D~=kf?pK0^N!T zeV{G_6;XvNeE3z$K?p}T3MASH0{i^aj*-8^R74%%iv1cEaOVJ$L7W1lQU&r(UZ{pO zAcmB^=HysdiGXb)kP9josEV=;3;_Vdi~%T|N7!Pj)SY?Jt`#bcmA$i-(!{3%ZGk); z${s2pB^>C8z!f$Zn82ERYnT{jQ5>~W6oswv;%2JR7x*kvB&kih-B^5Wk8oirXgMY! z&pQE!@|unzMUe6$EUHO>>f>L40FUARcG97BGAp%~K^H|56znNCM$`oLh2!te^=JgkU_c?LHy%&v<}2s z;{=C*x@o%6NFB{R%2WjLkHn}evqd{xQ9rG7E*Yus6N;0VQ!;;`J+G)HUK|`jGy}ds%PM9Lnx73BR=47->!gJwT3&Z2AoCikN6!)iB927%{rJL>8Cv} z2%NL3MwAprQo$@ZV}_lu<8ZEUpmt>m@yDj4(9YL0%2zb7{h$I-(dlR9;g`zzw4CgF zM!iHZIxU?sl+%M0v(nMjsZ6_JYjMk_fy*$omdaJn*skEfRKnZ-#2P_X>F%!-s;WYa z@)qwJwlk=aKg4!RqWmUI> zx$|~v{!+?>4mDmy&E{G4?8UMYb`7b{M`!I@TyM2SShPyoBX`HrI~o0CcTrLG%;KI6&%FDeIn>PC zGR-}#73Bd)J9(!iiyLm&uG$suICz~LBed<4FL-o%8Vrhc))<%!DtP+JWxi+~?=0&? za7c=qK1O62hhH?Lg=(BfcI>2?p(CoU4?%y2u5PE*;f%w*3j;o<+1h*A9p&|&j_lrO ztMwbX%HC5*0pEk8C-xEN?JU;(E{6J*sgmW95qLqX$&|6r^Fp)U^W`oK=_Et(o zWfzR#`UuA8qAg1l`l5~avd6WT9y5O;`*juY#eh2}G_dFUy>_`~s%2lDmv_ZM5~yuf znZC*T`8>R}%eea8>m)1sUe=!Rd?g{=g6X_bf)XlmH~qzzjkYj6_3=r*?SqtyUCOZ} zQs8ErFs-V<^|)Z)q;8r#ZN-DtJsL)t*06l(evU0V$)QH#ro%YAF516DL4CyOVZ7<__Dt5+O3y$4GX0*tJPF>MbuMtqZf3X5V|n(g{S(ummcaCe%HC* zjrgpBxP{kqqkx@t^~Uck)HnikbzjCzb`#g7EbW}AKP|$1YW?mD&EBALmKBtN{f=JqCNLs_Px!DHmelGZa{c|fcrBs7Ydnp1 z8Wj|r)B(nGO;>dcz7<%Hpz=rOJ~>+USrzAN7>fIaRzD)X9|EuJp#F(_o3m38oYZ+o zzYDVUHg@8L?MHFxT|fyFs(3UM`X)sSnf&H?=lf5~O1JbMjvR*}gd)kFQF#K&j9T1k2tOy$sJbq|v$25T_GZ@5=d+~(fHLFe`w zoXXdvd|t^K*J@8a!p9?R4buE2BV4%1uR7-bQBA}9Bko!w#MX2izakuJ$r7eCfk+2H z)qOo>rI^7i^lojqNBmG07LXeLRAG&X>fNxo(gK!(?4-pZX>!-i>u&W>yP!;uf z`cc5NkR$51YUj9jw-_kso*Act(ERiGb%996b>(eg`K|ZsVB;F}@QrRREkKcfyFqiO z>E=#L@J?IaPREO#u6H{xXgicMpZhdF58V7b6#RK4@AKG;&lB%HPtiV8&wQED{4#g* z%j@7T3wd9bUVM4;?#nycmz6VLS2e$`-Tb;9{B<+$>!8ELtSYJuN65q(UoZPgec?H_ z27i)9Hyc56%}~EJ^qpK`W`Tnzey zq%HX4!ed2F?eBYuetKxOKLGr(dbpbc><{?J)ai4kn*SCtSzO)Y2{Q*@{a%!HyR+UU z?WUh1nTh3;MZ~U!MpuGTf_eNJSiv0OEb#d9%Mr1ch7uPMy$5iuRKTFbN|9>w?@8&J z$G6aHo_YW?(NgJ_Xi4d9O`?s_pbf_l%QN|=PcE5B!VcS8ZpRWW-6)psslS92t|{HR zLb`YL3DHEe*+lD{mFl3eeu<6oRam2~;-@CwcF})YQm?6gy7r>vHtn)#oC|}!TPi&B z+cjU&LxB4G!quzoEhi5IjAC#7>OQbeWPrr?*fi8xKiO4^6g72YuzvCBTKW&irX_f8 zk1`ASSN1swrO0{tk?DNNpEm-gMKQ;PCD(~puYIg@IDC0;`Y)0I;8*8QrvtCyv((ly z06#zPZ0S1>zpC61kVo4MsT+Q~TuAb((-kutvn%teONuB4Op$HiQu4N9C5ZU?G}t1b zehWdES3wi0qyIYU|Ie)Le;oBpXJj?aZh8gBzk8Bn(ierZEiBW7og-ejLl1x4Zgu095db6m!a$Z*Qj);> zU;wKFyFp^5$rjkc=L*+F=6qHxG?JQWTI%v=obs&{uU0M8w>-2% zwi}UWf)P$pLh%Mp%IvJ1@LT40z;-v;O>kp3=^dP*HzVXN33A1|`$GUwOa#R~S!2*5 zmdQKE5Lmz70-nEA#p-~v4`(1xpPUelgw?OLFG|-y@p$fYU|>0T`T2m6Fcc3)XX=14 zA&HY@HdIpm{Z;%~boEgzKIlAPcd_x2HrySUKxk)NN~;pO>b7Z++iC_j?!kZPHJL=MKLaOv0T2(wE@)Y6#IJhJcwZ*K0-lJ7Eo4tk5vM%z@H|q z^I-mJNak5C2uciqApn4JfdV@b2Ud~07E{Xt;!uhXGx;-(`yvMbSI6T)Ch-tnE+K%F z(JskDh~(e>hh1hkdKBahWxP|wJHHMn6L+~KR2`MXuu#EWuSarL`N#lys1T;WH{1O! zOK7XAzA6E(yK?g+CnR)X3!4}jlZ)-tCwyT_;%45wA{im7I;{n)nzH>OT|~a{4`D$~#mB=AGfJxQ*y_9gqzNb`v4GNMJ=U9?-^$0Jg&h zd=?76oB-wUxI%_$<=;r6+b-asJ;3ddOv?}75Ifv5pFP?q?avN@9uky6 z*bCbr66h-BlbA9#^h8vU{?jh8S7Jm~zuYUz9&uNMu3VPFIRXRD&gLKo{Prig$J~?u zOrg?x97i~S0UZ)(QDUmx=#=N0lAE{%cG^9T1>v(@EbwK)FesRa;GiU*Ipx;xE;3gw zuUpQ)C3)>~zzlof$ue^&0n+B>1cnbrfNpxux&c%apL@Q3B+^RiA#i=n1qNK$n3jqn zrCaS*DC8oT5^Q_*&k#hBJd872AO~{RN2rHN$n2-@;&QJklrm~OpY^18VEiL|(?!-SZ1FUr(G7&Ov(zWm)m*DKw=D=Ms3z;Xl1 zqWc@6qO2=PS?fjS?{W~U#4^Ho;ij!W#Op!!D-RO_ytL@6PA`xBch->H?i)AGz3zyP z0b_kB&u@z_2TDZvfS+u~=K7Tt4BYm{KIPq&U{}^UpV-pE4%{gK;eSv5vJF9%+#Pb1 zf#X?E(klwDDkN+4hKT;M&UCL9bBg}8gp3WC5M1ixtqy#JzUUkw@R@uDg3~nlsa(4W z#e?4UuIk*vM@qKPigJJW1IDY$)eKoXk&OC;3-4tS@F>MUs~I&DH-t*Tq&m?NoikC{CLd4TgBpH?D&F;&F~9zytWe=h5EI2@TJr(r zobBG8QRSHU`av4^sY7#quL&zK@Nq0|RI$LO$o$HOl4HG=QSi#N%I6=-3kPf5A+`9eaNgl3p7 z0p)&Qx2~hBFXrT3Vm{#gt>?{zM}&x_}n0M>tK``3Sn|JAkg|j_0a^e^lS=-uZ{+_riGa&!)QWFZU9Dzu5`?)%C6W+f$a46~?EB19C6E zCnTJ#oqc-bqQ$YF|MW!TGkxxD7s7DT?{;bezd1#}o`G66TUjw3uem+>AwZUt=R@#R zu<``b3PFOCE~O_2`hU*5>`HC5)DPd5Vys(0Uhe{H+)CxQkBzlO` z0{|QienDv#%!bpG#X(rFJmt6cFD1dsR$z}YtjrGZjwFO69+_qVyG24mDN@0B#PAF} z5OY@WJNi3ZP@XIsN0iNC<7EbrS%r)kvLIzO#8B1$gbWX+z=J4ouU(Y5JTee-O3?xq zPeAB^#90W^_enq$#&u8S^bH>&X$XA~3)4+y@xG7lqKFwuLM0Rm`tZWMA zj1s$fV%UvB?jQB1~IC^!#_pa58UgAu9I}eMSq>fRQW1!R6%>I##6C3mMxR zWSuwT83XRfeng^$A!n}8OTQHs0T8#NA~T>Mv@a|})pTD|K+Py9P{3%9B(grl8-TDA zlvMqb@(Cz6{tnYFGv^L4-ll4r%45MB((#7%b#Q z3lc(26SYjA!=$|>qVK^Bb+;9 zo+|P~2m*6plE!5&QALavnQ}(asYvF+QKnLljL6Xx=Pf;XM}UFo@~joU)(F2m%qH~!5Id34^*2pk> zb~jJrAZ2UI{wOo+@<;IGC{l);bss4%y9*$7(&$0On~UJS#i!C1>CTJblZG@VA{>R& zRl+`diBG*J3A(D5%^6rg#izS-fMmVBE(;ZON`n4~LtY{Q9+bj}4ZubylKc5+76v7Sp-Wn6`f)iEiXSY)Yys|c*{{h1?;t5gUqly;~>3}#dwqYYv*v^}eJ z4gj<5D!oM!pRKCOl%k1CReeTf>f2~(Qq?wh<@=7J2TN5C)v9|tiau>uwZ+s%sTGT6 zR?K*kUS<_@jl`N5)(*ZZXpyYlR0HvMRKH!KKNV7=UezpBTv=K9ckDsaHh6rj!h#)C zoGF;ImD;Y8Hndg6x{|`sd0mjbgdL->q%Q7lfu_rYH= zH2>iwonAi2#>m7k)sRbVQ8cbyQ_qx_g7|7Udyj&RmyvbqryGvZ-Q3OdJX%VO;-ZTp z4EumhZ`QN$4)&!MdE=x6#yY**HMg=gR$~YgxRO67M*DsM0b$o5!rd&P(f-1?09jOI=Q*l5j#fFIxG`2Tpi$%* zSn}?3w<2%Lgh{h)R*?Bjl$V~>27=yHCZlJnce&F5cQ+YCe* zL8N!f^rV?iE!A(KCznmepDewkI#6fhisD9JUeN`PKWn>X(F-I<5YOW0abwfFSud(n zCov_XL03eWm~0}o-(Yhc1^c1TwfSXAE_>#JDXlR4i>1O;njUxl5_RS+W+q&6)_h}} z?+-fd=PY-(zw)xu#h8j36K1iRxhtleJ?CdMgaJs=#D)X#%H-8QOs^efUOStz4_`LO1->1^shi-Nxbm|u_1`uw5B+NU|(&kw%9+>=wp za>5kzHm{|q2y8JW!LiurF+Xo#E4%WV_3^w*SVjzTc6_?qnRRIj3qV$$_9GklGMUjq zua>a&VCvF4Y{#4N7p$N4q&}-AcULZZ7Y$_ASKck`=w38q?{PNF(Q(PHZ=e2ii8KR% z%0A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 From f31f25320f1629309d66ca9cb0a24f412946bd98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jim=C3=A9nez=20Es=C3=BAn?= Date: Mon, 26 Mar 2018 18:29:48 +0100 Subject: [PATCH 33/37] Expose SHA-1s via HasteFS (#5874) --- packages/jest-haste-map/src/haste_fs.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/jest-haste-map/src/haste_fs.js b/packages/jest-haste-map/src/haste_fs.js index ee7801514ac5..7f09f9f40098 100644 --- a/packages/jest-haste-map/src/haste_fs.js +++ b/packages/jest-haste-map/src/haste_fs.js @@ -29,6 +29,10 @@ export default class HasteFS { return (this._files[file] && this._files[file][H.DEPENDENCIES]) || null; } + getSha1(file: Path): ?string { + return (this._files[file] && this._files[file][H.SHA1]) || null; + } + exists(file: Path): boolean { return !!this._files[file]; } From abb6321de78824085d080bc65f8e1d596fa3949a Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Mon, 26 Mar 2018 14:52:47 -0400 Subject: [PATCH 34/37] Alias parity for all spy matchers (#5826) * Add .toBeCalledTimes and .toHaveBeenNthCalledWith * Update CHANGELOG.md --- CHANGELOG.md | 4 +- docs/ExpectAPI.md | 14 +- .../__snapshots__/spy_matchers.test.js.snap | 750 +++++++++++------- .../expect/src/__tests__/spy_matchers.test.js | 479 ++++++----- packages/expect/src/spy_matchers.js | 143 ++-- 5 files changed, 822 insertions(+), 568 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be3d9a539a64..862db3c3d283 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,12 +28,14 @@ * `[jest-mock]` Add tracking of return values in the `mock` property ([#5752](https://github.com/facebook/jest/pull/5752)) * `[jest-mock]` Add tracking of thrown errors in the `mock` property - ([5764](https://github.com/facebook/jest/pull/5764)) + ([#5764](https://github.com/facebook/jest/pull/5764)) * `[expect]`Add nthCalledWith spy matcher ([#5605](https://github.com/facebook/jest/pull/5605)) * `[jest-cli]` Add `isSerial` property that runners can expose to specify that they can not run in parallel ([#5706](https://github.com/facebook/jest/pull/5706)) +* `[expect]` Add `.toBeCalledTimes` and `toHaveBeenNthCalledWith` aliases + ([#5826](https://github.com/facebook/jest/pull/5826)) * `[jest-cli]` Interactive Snapshot Mode improvements ([#5864](https://github.com/facebook/jest/pull/5864)) diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 2549488517bd..2fc3e849d086 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -571,6 +571,8 @@ describe('drinkAll', () => { ### `.toHaveBeenCalledTimes(number)` +Also under the alias: `.toBeCalledTimes(number)` + Use `.toHaveBeenCalledTimes` to ensure that a mock function got called exact number of times. @@ -626,10 +628,12 @@ test('applying to all flavors does mango last', () => { }); ``` -### `.nthCalledWith(nthCall, arg1, arg2, ....)` +### `.toHaveBeenNthCalledWith(nthCall, arg1, arg2, ....)` + +Also under the alias: `.nthCalledWith(arg1, arg2, ...)` -If you have a mock function, you can use `.nthCalledWith` to test what arguments -it was nth called with. For example, let's say you have a +If you have a mock function, you can use `.toHaveBeenNthCalledWith` to test what +arguments it was nth called with. For example, let's say you have a `drinkEach(drink, Array)` function that applies `f` to a bunch of flavors, and you want to ensure that when you call it, the first flavor it operates on is `'lemon'` and the second one is `'octopus'`. You can write: @@ -640,8 +644,8 @@ Note that, nth argument must be positive integer starting from 1. test('drinkEach drinks each drink', () => { const drink = jest.fn(); drinkEach(drink, ['lemon', 'octopus']); - expect(drink).nthCalledWith(1, 'lemon'); - expect(drink).nthCalledWith(2, 'octopus'); + expect(drink).toHaveBeenNthCalledWith(1, 'lemon'); + expect(drink).toHaveBeenNthCalledWith(2, 'octopus'); }); ``` diff --git a/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap index 8487cb972281..fd64c30e1931 100644 --- a/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap @@ -102,27 +102,6 @@ Expected mock function to not have been last called with: [\\"foo\\", \\"bar\\"]" `; -exports[`lastCalledWith works with many arguments 2`] = ` -"expect(jest.fn()).not.lastCalledWith(expected) - -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" -`; - -exports[`lastCalledWith works with many arguments 3`] = ` -"expect(jest.fn()).not.lastCalledWith(expected) - -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" -`; - -exports[`lastCalledWith works with many arguments 4`] = ` -"expect(jest.fn()).not.lastCalledWith(expected) - -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" -`; - exports[`lastCalledWith works with many arguments that don't match 1`] = ` "expect(jest.fn()).lastCalledWith(expected) @@ -132,166 +111,333 @@ as argument 2, but it was called with \\"bar3\\"." `; -exports[`lastCalledWith works with many arguments that don't match 2`] = ` -"expect(jest.fn()).lastCalledWith(expected) - -Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." -`; - -exports[`lastCalledWith works with many arguments that don't match 3`] = ` +exports[`lastCalledWith works with trailing undefined arguments 1`] = ` "expect(jest.fn()).lastCalledWith(expected) Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." + Did not expect argument 2 but it was called with undefined." `; -exports[`lastCalledWith works with many arguments that don't match 4`] = ` -"expect(jest.fn()).lastCalledWith(expected) +exports[`nthCalledWith should reject non integer nth value 1`] = `"nth value 0.1 must be a positive integer greater than 0"`; -Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." -`; +exports[`nthCalledWith should reject nth value smaller than 1 1`] = `"nth value 0 must be a positive integer greater than 0"`; -exports[`lastCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).lastCalledWith(expected) +exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 1`] = ` +"expect(jest.fn()).nthCalledWith(expected) -Expected mock function to have been last called with: - Did not expect argument 2 but it was called with undefined." +Expected mock function first call to have been called with: +" `; -exports[`nthCalledWith nthCalledWith 1`] = ` +exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 2`] = ` "expect(jest.fn()).not.nthCalledWith(expected) Expected mock function first call to not have been called with: [\\"foo1\\", \\"bar\\"]" `; -exports[`nthCalledWith nthCalledWith 2`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`nthCalledWith works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].nthCalledWith() -Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" +jest.fn() value must be a mock function or spy. +Received: + function: [Function fn]" `; -exports[`nthCalledWith nthCalledWith 3`] = ` +exports[`nthCalledWith works when not called 1`] = ` +"expect(jest.fn()).nthCalledWith(expected) + +Expected mock function first call to have been called with: + [\\"foo\\", \\"bar\\"] +But it was not called." +`; + +exports[`nthCalledWith works with Immutable.js objects 1`] = ` "expect(jest.fn()).not.nthCalledWith(expected) Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" + [Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}]" `; -exports[`nthCalledWith nthCalledWith 4`] = ` +exports[`nthCalledWith works with Map 1`] = ` "expect(jest.fn()).not.nthCalledWith(expected) Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" + [Map {1 => 2, 2 => 1}]" `; -exports[`nthCalledWith should reject non integer nth value 1`] = `"nth value 0.1 must be a positive integer greater than 0"`; - -exports[`nthCalledWith should reject non integer nth value 2`] = `"nth value 0.1 must be a positive integer greater than 0"`; +exports[`nthCalledWith works with Map 2`] = ` +"expect(jest.fn()).nthCalledWith(expected) -exports[`nthCalledWith should reject non integer nth value 3`] = `"nth value 0.1 must be a positive integer greater than 0"`; +Expected mock function first call to have been called with: + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. -exports[`nthCalledWith should reject non integer nth value 4`] = `"nth value 0.1 must be a positive integer greater than 0"`; +Difference: -exports[`nthCalledWith should reject nth value smaller than 1 1`] = `"nth value 0 must be a positive integer greater than 0"`; +- Expected ++ Received -exports[`nthCalledWith should reject nth value smaller than 1 2`] = `"nth value 0 must be a positive integer greater than 0"`; + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" +`; -exports[`nthCalledWith should reject nth value smaller than 1 3`] = `"nth value 0 must be a positive integer greater than 0"`; +exports[`nthCalledWith works with Set 1`] = ` +"expect(jest.fn()).not.nthCalledWith(expected) -exports[`nthCalledWith should reject nth value smaller than 1 4`] = `"nth value 0 must be a positive integer greater than 0"`; +Expected mock function first call to not have been called with: + [Set {1, 2}]" +`; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 1`] = ` +exports[`nthCalledWith works with Set 2`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: -" -`; + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 2`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +Difference: -Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 3`] = ` +exports[`nthCalledWith works with arguments that don't match 1`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: -" + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." +`; + +exports[`nthCalledWith works with arguments that match 1`] = ` +"expect(jest.fn()).not.nthCalledWith(expected) + +Expected mock function first call to not have been called with: + [\\"foo\\", \\"bar\\"]" `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 4`] = ` +exports[`nthCalledWith works with three calls 1`] = ` "expect(jest.fn()).not.nthCalledWith(expected) Expected mock function first call to not have been called with: [\\"foo1\\", \\"bar\\"]" `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 5`] = ` +exports[`nthCalledWith works with trailing undefined arguments 1`] = ` "expect(jest.fn()).nthCalledWith(expected) Expected mock function first call to have been called with: -" + Did not expect argument 2 but it was called with undefined." `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 6`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalled .not fails with any argument passed 1`] = ` +"expect(received)[.not].toBeCalled() -Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" +Matcher does not accept any arguments. +Got: + number: 555" `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 7`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalled .not passes when called 1`] = ` +"expect(jest.fn()).toBeCalled() -Expected mock function first call to have been called with: -" +Expected mock function to have been called." `; -exports[`nthCalledWith should replace 1st, 2nd, 3rd with first, second, third 8`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalled fails with any argument passed 1`] = ` +"expect(received)[.not].toBeCalled() -Expected mock function first call to not have been called with: - [\\"foo1\\", \\"bar\\"]" +Matcher does not accept any arguments. +Got: + number: 555" `; -exports[`nthCalledWith works when not called 1`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalled passes when called 1`] = ` +"expect(jest.fn()).not.toBeCalled() -Expected mock function first call to have been called with: +Expected mock function not to be called but it was called with: + []" +`; + +exports[`toBeCalled works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].toBeCalled() + +jest.fn() value must be a mock function or spy. +Received: + function: [Function fn]" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 1`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + object: {}" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 2`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + array: []" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 3`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + boolean: true" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 4`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + string: \\"a\\"" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 5`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + map: Map {}" +`; + +exports[`toBeCalledTimes .not only accepts a number argument 6`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + function: [Function anonymous]" +`; + +exports[`toBeCalledTimes .not passes if function called less than expected times 1`] = ` +"expect(jest.fn()).toBeCalledTimes(2) + +Expected mock function to have been called two times, but it was called one time." +`; + +exports[`toBeCalledTimes .not passes if function called more than expected times 1`] = ` +"expect(jest.fn()).toBeCalledTimes(2) + +Expected mock function to have been called two times, but it was called three times." +`; + +exports[`toBeCalledTimes only accepts a number argument 1`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + object: {}" +`; + +exports[`toBeCalledTimes only accepts a number argument 2`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + array: []" +`; + +exports[`toBeCalledTimes only accepts a number argument 3`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + boolean: true" +`; + +exports[`toBeCalledTimes only accepts a number argument 4`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + string: \\"a\\"" +`; + +exports[`toBeCalledTimes only accepts a number argument 5`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + map: Map {}" +`; + +exports[`toBeCalledTimes only accepts a number argument 6`] = ` +"expect(received)[.not].toBeCalledTimes(expected) + +Expected value must be a number. +Got: + function: [Function anonymous]" +`; + +exports[`toBeCalledTimes passes if function called equal to expected times 1`] = ` +"expect(jest.fn()).not.toBeCalledTimes(2) + +Expected mock function not to be called two times, but it was called exactly two times." +`; + +exports[`toBeCalledTimes works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].toBeCalledTimes() + +jest.fn() value must be a mock function or spy. +Received: + function: [Function fn]" +`; + +exports[`toBeCalledWith works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].toBeCalledWith() + +jest.fn() value must be a mock function or spy. +Received: + function: [Function fn]" +`; + +exports[`toBeCalledWith works when not called 1`] = ` +"expect(jest.fn()).toBeCalledWith(expected) + +Expected mock function to have been called with: [\\"foo\\", \\"bar\\"] But it was not called." `; -exports[`nthCalledWith works with Immutable.js objects 1`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalledWith works with Immutable.js objects 1`] = ` +"expect(jest.fn()).not.toBeCalledWith(expected) -Expected mock function first call to not have been called with: +Expected mock function not to have been called with: [Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}]" `; -exports[`nthCalledWith works with Map 1`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalledWith works with Map 1`] = ` +"expect(jest.fn()).not.toBeCalledWith(expected) -Expected mock function first call to not have been called with: +Expected mock function not to have been called with: [Map {1 => 2, 2 => 1}]" `; -exports[`nthCalledWith works with Map 2`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalledWith works with Map 2`] = ` +"expect(jest.fn()).toBeCalledWith(expected) -Expected mock function first call to have been called with: +Expected mock function to have been called with: Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} as argument 1, but it was called with Map {1 => 2, 2 => 1}. @@ -309,17 +455,17 @@ Difference: }" `; -exports[`nthCalledWith works with Set 1`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalledWith works with Set 1`] = ` +"expect(jest.fn()).not.toBeCalledWith(expected) -Expected mock function first call to not have been called with: +Expected mock function not to have been called with: [Set {1, 2}]" `; -exports[`nthCalledWith works with Set 2`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalledWith works with Set 2`] = ` +"expect(jest.fn()).toBeCalledWith(expected) -Expected mock function first call to have been called with: +Expected mock function to have been called with: Set {3, 4} as argument 1, but it was called with Set {1, 2}. @@ -337,96 +483,151 @@ Difference: }" `; -exports[`nthCalledWith works with arguments that don't match 1`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalledWith works with arguments that don't match 1`] = ` +"expect(jest.fn()).toBeCalledWith(expected) -Expected mock function first call to have been called with: +Expected mock function to have been called with: \\"bar\\" as argument 2, but it was called with \\"bar1\\"." `; -exports[`nthCalledWith works with arguments that match 1`] = ` -"expect(jest.fn()).not.nthCalledWith(expected) +exports[`toBeCalledWith works with arguments that match 1`] = ` +"expect(jest.fn()).not.toBeCalledWith(expected) -Expected mock function first call to not have been called with: +Expected mock function not to have been called with: [\\"foo\\", \\"bar\\"]" `; -exports[`nthCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).nthCalledWith(expected) +exports[`toBeCalledWith works with many arguments 1`] = ` +"expect(jest.fn()).not.toBeCalledWith(expected) -Expected mock function first call to have been called with: +Expected mock function not to have been called with: + [\\"foo\\", \\"bar\\"]" +`; + +exports[`toBeCalledWith works with many arguments that don't match 1`] = ` +"expect(jest.fn()).toBeCalledWith(expected) + +Expected mock function to have been called with: + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\". + + \\"bar\\" +as argument 2, but it was called with + \\"bar2\\". + + \\"bar\\" +as argument 2, but it was called with + \\"bar1\\"." +`; + +exports[`toBeCalledWith works with trailing undefined arguments 1`] = ` +"expect(jest.fn()).toBeCalledWith(expected) + +Expected mock function to have been called with: Did not expect argument 2 but it was called with undefined." `; -exports[`toBeCalled works only on spies or jest.fn 1`] = ` -"expect(jest.fn())[.not].toBeCalled() +exports[`toHaveBeenCalled .not fails with any argument passed 1`] = ` +"expect(received)[.not].toHaveBeenCalled() + +Matcher does not accept any arguments. +Got: + number: 555" +`; + +exports[`toHaveBeenCalled .not passes when called 1`] = ` +"expect(jest.fn()).toHaveBeenCalled() + +Expected mock function to have been called." +`; + +exports[`toHaveBeenCalled fails with any argument passed 1`] = ` +"expect(received)[.not].toHaveBeenCalled() + +Matcher does not accept any arguments. +Got: + number: 555" +`; + +exports[`toHaveBeenCalled passes when called 1`] = ` +"expect(jest.fn()).not.toHaveBeenCalled() + +Expected mock function not to be called but it was called with: + []" +`; + +exports[`toHaveBeenCalled works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].toHaveBeenCalled() jest.fn() value must be a mock function or spy. Received: function: [Function fn]" `; -exports[`toBeCalled works with jest.fn 1`] = ` -"expect(jest.fn()).toBeCalled() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 1`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -Expected mock function to have been called." +Expected value must be a number. +Got: + object: {}" `; -exports[`toBeCalled works with jest.fn 2`] = ` -"expect(jest.fn()).not.toBeCalled() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 2`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -Expected mock function not to be called but it was called with: - []" +Expected value must be a number. +Got: + array: []" `; -exports[`toBeCalled works with jest.fn 3`] = ` -"expect(received)[.not].toBeCalled() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 3`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -Matcher does not accept any arguments. +Expected value must be a number. Got: - number: 555" + boolean: true" `; -exports[`toBeCalledWith works only on spies or jest.fn 1`] = ` -"expect(jest.fn())[.not].toBeCalledWith() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 4`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -jest.fn() value must be a mock function or spy. -Received: - function: [Function fn]" +Expected value must be a number. +Got: + string: \\"a\\"" `; -exports[`toHaveBeenCalled works only on spies or jest.fn 1`] = ` -"expect(jest.fn())[.not].toHaveBeenCalled() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 5`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -jest.fn() value must be a mock function or spy. -Received: - function: [Function fn]" +Expected value must be a number. +Got: + map: Map {}" `; -exports[`toHaveBeenCalled works with jest.fn 1`] = ` -"expect(jest.fn()).toHaveBeenCalled() +exports[`toHaveBeenCalledTimes .not only accepts a number argument 6`] = ` +"expect(received)[.not].toHaveBeenCalledTimes(expected) -Expected mock function to have been called." +Expected value must be a number. +Got: + function: [Function anonymous]" `; -exports[`toHaveBeenCalled works with jest.fn 2`] = ` -"expect(jest.fn()).not.toHaveBeenCalled() +exports[`toHaveBeenCalledTimes .not passes if function called less than expected times 1`] = ` +"expect(jest.fn()).toHaveBeenCalledTimes(2) -Expected mock function not to be called but it was called with: - []" +Expected mock function to have been called two times, but it was called one time." `; -exports[`toHaveBeenCalled works with jest.fn 3`] = ` -"expect(received)[.not].toHaveBeenCalled() +exports[`toHaveBeenCalledTimes .not passes if function called more than expected times 1`] = ` +"expect(jest.fn()).toHaveBeenCalledTimes(2) -Matcher does not accept any arguments. -Got: - number: 555" +Expected mock function to have been called two times, but it was called three times." `; -exports[`toHaveBeenCalledTimes accepts only numbers 1`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 1`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -434,7 +635,7 @@ Got: object: {}" `; -exports[`toHaveBeenCalledTimes accepts only numbers 2`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 2`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -442,7 +643,7 @@ Got: array: []" `; -exports[`toHaveBeenCalledTimes accepts only numbers 3`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 3`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -450,7 +651,7 @@ Got: boolean: true" `; -exports[`toHaveBeenCalledTimes accepts only numbers 4`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 4`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -458,7 +659,7 @@ Got: string: \\"a\\"" `; -exports[`toHaveBeenCalledTimes accepts only numbers 5`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 5`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -466,7 +667,7 @@ Got: map: Map {}" `; -exports[`toHaveBeenCalledTimes accepts only numbers 6`] = ` +exports[`toHaveBeenCalledTimes only accepts a number argument 6`] = ` "expect(received)[.not].toHaveBeenCalledTimes(expected) Expected value must be a number. @@ -474,25 +675,13 @@ Got: function: [Function anonymous]" `; -exports[`toHaveBeenCalledTimes fails if function called less than expected times 1`] = ` -"expect(jest.fn()).toHaveBeenCalledTimes(2) - -Expected mock function to have been called two times, but it was called one time." -`; - -exports[`toHaveBeenCalledTimes fails if function called more than expected times 1`] = ` -"expect(jest.fn()).toHaveBeenCalledTimes(2) - -Expected mock function to have been called two times, but it was called three times." -`; - exports[`toHaveBeenCalledTimes passes if function called equal to expected times 1`] = ` "expect(jest.fn()).not.toHaveBeenCalledTimes(2) Expected mock function not to be called two times, but it was called exactly two times." `; -exports[`toHaveBeenCalledTimes verifies that actual is a Spy 1`] = ` +exports[`toHaveBeenCalledTimes works only on spies or jest.fn 1`] = ` "expect(jest.fn())[.not].toHaveBeenCalledTimes() jest.fn() value must be a mock function or spy. @@ -602,27 +791,6 @@ Expected mock function not to have been called with: [\\"foo\\", \\"bar\\"]" `; -exports[`toHaveBeenCalledWith works with many arguments 2`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(expected) - -Expected mock function not to have been called with: - [\\"foo\\", \\"bar\\"]" -`; - -exports[`toHaveBeenCalledWith works with many arguments 3`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(expected) - -Expected mock function not to have been called with: - [\\"foo\\", \\"bar\\"]" -`; - -exports[`toHaveBeenCalledWith works with many arguments 4`] = ` -"expect(jest.fn()).not.toHaveBeenCalledWith(expected) - -Expected mock function not to have been called with: - [\\"foo\\", \\"bar\\"]" -`; - exports[`toHaveBeenCalledWith works with many arguments that don't match 1`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) @@ -640,57 +808,6 @@ as argument 2, but it was called with \\"bar1\\"." `; -exports[`toHaveBeenCalledWith works with many arguments that don't match 2`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(expected) - -Expected mock function to have been called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar2\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar1\\"." -`; - -exports[`toHaveBeenCalledWith works with many arguments that don't match 3`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(expected) - -Expected mock function to have been called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar2\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar1\\"." -`; - -exports[`toHaveBeenCalledWith works with many arguments that don't match 4`] = ` -"expect(jest.fn()).toHaveBeenCalledWith(expected) - -Expected mock function to have been called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar2\\". - - \\"bar\\" -as argument 2, but it was called with - \\"bar1\\"." -`; - exports[`toHaveBeenCalledWith works with trailing undefined arguments 1`] = ` "expect(jest.fn()).toHaveBeenCalledWith(expected) @@ -800,66 +917,145 @@ Expected mock function to not have been last called with: [\\"foo\\", \\"bar\\"]" `; -exports[`toHaveBeenLastCalledWith works with many arguments 2`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenLastCalledWith works with many arguments that don't match 1`] = ` +"expect(jest.fn()).toHaveBeenLastCalledWith(expected) -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" +Expected mock function to have been last called with: + \\"bar\\" +as argument 2, but it was called with + \\"bar3\\"." `; -exports[`toHaveBeenLastCalledWith works with many arguments 3`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenLastCalledWith works with trailing undefined arguments 1`] = ` +"expect(jest.fn()).toHaveBeenLastCalledWith(expected) -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" +Expected mock function to have been last called with: + Did not expect argument 2 but it was called with undefined." `; -exports[`toHaveBeenLastCalledWith works with many arguments 4`] = ` -"expect(jest.fn()).not.toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith should reject non integer nth value 1`] = `"nth value 0.1 must be a positive integer greater than 0"`; -Expected mock function to not have been last called with: - [\\"foo\\", \\"bar\\"]" +exports[`toHaveBeenNthCalledWith should reject nth value smaller than 1 1`] = `"nth value 0 must be a positive integer greater than 0"`; + +exports[`toHaveBeenNthCalledWith should replace 1st, 2nd, 3rd with first, second, third 1`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) + +Expected mock function first call to have been called with: +" `; -exports[`toHaveBeenLastCalledWith works with many arguments that don't match 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith should replace 1st, 2nd, 3rd with first, second, third 2`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) -Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." +Expected mock function first call to not have been called with: + [\\"foo1\\", \\"bar\\"]" `; -exports[`toHaveBeenLastCalledWith works with many arguments that don't match 2`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith works only on spies or jest.fn 1`] = ` +"expect(jest.fn())[.not].toHaveBeenNthCalledWith() -Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." +jest.fn() value must be a mock function or spy. +Received: + function: [Function fn]" `; -exports[`toHaveBeenLastCalledWith works with many arguments that don't match 3`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith works when not called 1`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) -Expected mock function to have been last called with: - \\"bar\\" -as argument 2, but it was called with - \\"bar3\\"." +Expected mock function first call to have been called with: + [\\"foo\\", \\"bar\\"] +But it was not called." `; -exports[`toHaveBeenLastCalledWith works with many arguments that don't match 4`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith works with Immutable.js objects 1`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) -Expected mock function to have been last called with: +Expected mock function first call to not have been called with: + [Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}, Immutable.Map {\\"a\\": {\\"b\\": \\"c\\"}}]" +`; + +exports[`toHaveBeenNthCalledWith works with Map 1`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) + +Expected mock function first call to not have been called with: + [Map {1 => 2, 2 => 1}]" +`; + +exports[`toHaveBeenNthCalledWith works with Map 2`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) + +Expected mock function first call to have been called with: + Map {\\"a\\" => \\"b\\", \\"b\\" => \\"a\\"} +as argument 1, but it was called with + Map {1 => 2, 2 => 1}. + +Difference: + +- Expected ++ Received + + Map { +- \\"a\\" => \\"b\\", +- \\"b\\" => \\"a\\", ++ 1 => 2, ++ 2 => 1, + }" +`; + +exports[`toHaveBeenNthCalledWith works with Set 1`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) + +Expected mock function first call to not have been called with: + [Set {1, 2}]" +`; + +exports[`toHaveBeenNthCalledWith works with Set 2`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) + +Expected mock function first call to have been called with: + Set {3, 4} +as argument 1, but it was called with + Set {1, 2}. + +Difference: + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }" +`; + +exports[`toHaveBeenNthCalledWith works with arguments that don't match 1`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) + +Expected mock function first call to have been called with: \\"bar\\" as argument 2, but it was called with - \\"bar3\\"." + \\"bar1\\"." `; -exports[`toHaveBeenLastCalledWith works with trailing undefined arguments 1`] = ` -"expect(jest.fn()).toHaveBeenLastCalledWith(expected) +exports[`toHaveBeenNthCalledWith works with arguments that match 1`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) -Expected mock function to have been last called with: +Expected mock function first call to not have been called with: + [\\"foo\\", \\"bar\\"]" +`; + +exports[`toHaveBeenNthCalledWith works with three calls 1`] = ` +"expect(jest.fn()).not.toHaveBeenNthCalledWith(expected) + +Expected mock function first call to not have been called with: + [\\"foo1\\", \\"bar\\"]" +`; + +exports[`toHaveBeenNthCalledWith works with trailing undefined arguments 1`] = ` +"expect(jest.fn()).toHaveBeenNthCalledWith(expected) + +Expected mock function first call to have been called with: Did not expect argument 2 but it was called with undefined." `; diff --git a/packages/expect/src/__tests__/spy_matchers.test.js b/packages/expect/src/__tests__/spy_matchers.test.js index 52cb3d1d29e9..91624ef28515 100644 --- a/packages/expect/src/__tests__/spy_matchers.test.js +++ b/packages/expect/src/__tests__/spy_matchers.test.js @@ -9,297 +9,336 @@ const Immutable = require('immutable'); const jestExpect = require('../'); -['toHaveBeenCalled', 'toBeCalled'].forEach(called => { - test(`${called} works with jest.fn`, () => { - const fn = jest.fn(); +['toBeCalled', 'toHaveBeenCalled'].forEach(called => { + describe(`${called}`, () => { + test(`works only on spies or jest.fn`, () => { + const fn = function fn() {}; - jestExpect(fn).not[called](); - expect(() => jestExpect(fn)[called]()).toThrowErrorMatchingSnapshot(); + expect(() => jestExpect(fn)[called]()).toThrowErrorMatchingSnapshot(); + }); - fn(); - jestExpect(fn)[called](); - expect(() => jestExpect(fn).not[called]()).toThrowErrorMatchingSnapshot(); + test(`passes when called`, () => { + const fn = jest.fn(); + fn(); + jestExpect(fn)[called](); + expect(() => jestExpect(fn).not[called]()).toThrowErrorMatchingSnapshot(); + }); - expect(() => jestExpect(fn)[called](555)).toThrowErrorMatchingSnapshot(); - }); -}); + test(`.not passes when called`, () => { + const fn = jest.fn(); + + jestExpect(fn).not[called](); + expect(() => jestExpect(fn)[called]()).toThrowErrorMatchingSnapshot(); + }); + + test(`fails with any argument passed`, () => { + const fn = jest.fn(); -describe('toHaveBeenCalledTimes', () => { - it('accepts only numbers', () => { - const fn = jest.fn(); - fn(); - jestExpect(fn).toHaveBeenCalledTimes(1); + fn(); + expect(() => jestExpect(fn)[called](555)).toThrowErrorMatchingSnapshot(); + }); + + test(`.not fails with any argument passed`, () => { + const fn = jest.fn(); - [{}, [], true, 'a', new Map(), () => {}].forEach(value => { expect(() => - jestExpect(fn).toHaveBeenCalledTimes(value), + jestExpect(fn).not[called](555), ).toThrowErrorMatchingSnapshot(); }); }); +}); - it('verifies that actual is a Spy', () => { - const fn = function fn() {}; +['toBeCalledTimes', 'toHaveBeenCalledTimes'].forEach(calledTimes => { + describe(`${calledTimes}`, () => { + test('works only on spies or jest.fn', () => { + const fn = function fn() {}; - expect(() => - jestExpect(fn).toHaveBeenCalledTimes(2), - ).toThrowErrorMatchingSnapshot(); - }); + expect(() => + jestExpect(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); - it('passes if function called equal to expected times', () => { - const fn = jest.fn(); - fn(); - fn(); + test('only accepts a number argument', () => { + const fn = jest.fn(); + fn(); + jestExpect(fn)[calledTimes](1); + + [{}, [], true, 'a', new Map(), () => {}].forEach(value => { + expect(() => + jestExpect(fn)[calledTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); - jestExpect(fn).toHaveBeenCalledTimes(2); + test('.not only accepts a number argument', () => { + const fn = jest.fn(); + jestExpect(fn).not[calledTimes](1); - expect(() => - jestExpect(fn).not.toHaveBeenCalledTimes(2), - ).toThrowErrorMatchingSnapshot(); - }); + [{}, [], true, 'a', new Map(), () => {}].forEach(value => { + expect(() => + jestExpect(fn).not[calledTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); - it('fails if function called more than expected times', () => { - const fn = jest.fn(); - fn(); - fn(); - fn(); + test('passes if function called equal to expected times', () => { + const fn = jest.fn(); + fn(); + fn(); - jestExpect(fn).toHaveBeenCalledTimes(3); - jestExpect(fn).not.toHaveBeenCalledTimes(2); + jestExpect(fn)[calledTimes](2); - expect(() => - jestExpect(fn).toHaveBeenCalledTimes(2), - ).toThrowErrorMatchingSnapshot(); - }); + expect(() => + jestExpect(fn).not[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); - it('fails if function called less than expected times', () => { - const fn = jest.fn(); - fn(); + test('.not passes if function called more than expected times', () => { + const fn = jest.fn(); + fn(); + fn(); + fn(); - jestExpect(fn).toHaveBeenCalledTimes(1); - jestExpect(fn).not.toHaveBeenCalledTimes(2); + jestExpect(fn)[calledTimes](3); + jestExpect(fn).not[calledTimes](2); - expect(() => - jestExpect(fn).toHaveBeenCalledTimes(2), - ).toThrowErrorMatchingSnapshot(); - }); -}); + expect(() => + jestExpect(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); -[ - 'lastCalledWith', - 'toBeCalled', - 'toBeCalledWith', - 'toHaveBeenCalled', - 'toHaveBeenCalledWith', - 'toHaveBeenLastCalledWith', -].forEach(calledWith => { - test(`${calledWith} works only on spies or jest.fn`, () => { - const fn = function fn() {}; + test('.not passes if function called less than expected times', () => { + const fn = jest.fn(); + fn(); + + jestExpect(fn)[calledTimes](1); + jestExpect(fn).not[calledTimes](2); - expect(() => jestExpect(fn)[calledWith]()).toThrowErrorMatchingSnapshot(); + expect(() => + jestExpect(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); }); }); [ 'lastCalledWith', + 'toHaveBeenLastCalledWith', 'nthCalledWith', + 'toHaveBeenNthCalledWith', + 'toBeCalledWith', 'toHaveBeenCalledWith', - 'toHaveBeenLastCalledWith', ].forEach(calledWith => { const caller = function(callee, ...args) { - if (calledWith == 'nthCalledWith') { + if ( + calledWith === 'nthCalledWith' || + calledWith === 'toHaveBeenNthCalledWith' + ) { callee(1, ...args); } else { callee(...args); } }; - test(`${calledWith} works when not called`, () => { - const fn = jest.fn(); - caller(jestExpect(fn).not[calledWith], 'foo', 'bar'); - - expect(() => - caller(jestExpect(fn)[calledWith], 'foo', 'bar'), - ).toThrowErrorMatchingSnapshot(); - }); - - test(`${calledWith} works with no arguments`, () => { - const fn = jest.fn(); - fn(); - caller(jestExpect(fn)[calledWith]); - }); - - test(`${calledWith} works with arguments that don't match`, () => { - const fn = jest.fn(); - fn('foo', 'bar1'); - - caller(jestExpect(fn).not[calledWith], 'foo', 'bar'); - - expect(() => - caller(jestExpect(fn)[calledWith], 'foo', 'bar'), - ).toThrowErrorMatchingSnapshot(); - }); - - test(`${calledWith} works with arguments that match`, () => { - const fn = jest.fn(); - fn('foo', 'bar'); - - caller(jestExpect(fn)[calledWith], 'foo', 'bar'); - - expect(() => - caller(jestExpect(fn).not[calledWith], 'foo', 'bar'), - ).toThrowErrorMatchingSnapshot(); - }); - - test(`${calledWith} works with trailing undefined arguments`, () => { - const fn = jest.fn(); - fn('foo', undefined); - - expect(() => - caller(jestExpect(fn)[calledWith], 'foo'), - ).toThrowErrorMatchingSnapshot(); - }); - - test(`${calledWith} works with Map`, () => { - const fn = jest.fn(); - - const m1 = new Map([[1, 2], [2, 1]]); - const m2 = new Map([[1, 2], [2, 1]]); - const m3 = new Map([['a', 'b'], ['b', 'a']]); - - fn(m1); + describe(`${calledWith}`, () => { + test(`works only on spies or jest.fn`, () => { + const fn = function fn() {}; - caller(jestExpect(fn)[calledWith], m2); - caller(jestExpect(fn).not[calledWith], m3); - - expect(() => - caller(jestExpect(fn).not[calledWith], m2), - ).toThrowErrorMatchingSnapshot(); - expect(() => - caller(jestExpect(fn)[calledWith], m3), - ).toThrowErrorMatchingSnapshot(); - }); + expect(() => jestExpect(fn)[calledWith]()).toThrowErrorMatchingSnapshot(); + }); - test(`${calledWith} works with Set`, () => { - const fn = jest.fn(); + test(`works when not called`, () => { + const fn = jest.fn(); + caller(jestExpect(fn).not[calledWith], 'foo', 'bar'); - const s1 = new Set([1, 2]); - const s2 = new Set([1, 2]); - const s3 = new Set([3, 4]); + expect(() => + caller(jestExpect(fn)[calledWith], 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); - fn(s1); + test(`works with no arguments`, () => { + const fn = jest.fn(); + fn(); + caller(jestExpect(fn)[calledWith]); + }); - caller(jestExpect(fn)[calledWith], s2); - caller(jestExpect(fn).not[calledWith], s3); + test(`works with arguments that don't match`, () => { + const fn = jest.fn(); + fn('foo', 'bar1'); - expect(() => - caller(jestExpect(fn).not[calledWith], s2), - ).toThrowErrorMatchingSnapshot(); - expect(() => - caller(jestExpect(fn)[calledWith], s3), - ).toThrowErrorMatchingSnapshot(); - }); + caller(jestExpect(fn).not[calledWith], 'foo', 'bar'); - test(`${calledWith} works with Immutable.js objects`, () => { - const fn = jest.fn(); - const directlyCreated = new Immutable.Map([['a', {b: 'c'}]]); - const indirectlyCreated = new Immutable.Map().set('a', {b: 'c'}); - fn(directlyCreated, indirectlyCreated); - - caller(jestExpect(fn)[calledWith], indirectlyCreated, directlyCreated); - - expect(() => - caller( - jestExpect(fn).not[calledWith], - indirectlyCreated, - directlyCreated, - ), - ).toThrowErrorMatchingSnapshot(); - }); + expect(() => + caller(jestExpect(fn)[calledWith], 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); - [ - 'lastCalledWith', - 'toHaveBeenCalledWith', - 'toHaveBeenLastCalledWith', - ].forEach(calledWith => { - test(`${calledWith} works with many arguments`, () => { + test(`works with arguments that match`, () => { const fn = jest.fn(); - fn('foo1', 'bar'); - fn('foo', 'bar1'); fn('foo', 'bar'); - jestExpect(fn)[calledWith]('foo', 'bar'); + caller(jestExpect(fn)[calledWith], 'foo', 'bar'); expect(() => - jestExpect(fn).not[calledWith]('foo', 'bar'), + caller(jestExpect(fn).not[calledWith], 'foo', 'bar'), ).toThrowErrorMatchingSnapshot(); }); - test(`${calledWith} works with many arguments that don't match`, () => { + test(`works with trailing undefined arguments`, () => { const fn = jest.fn(); - fn('foo', 'bar1'); - fn('foo', 'bar2'); - fn('foo', 'bar3'); - - jestExpect(fn).not[calledWith]('foo', 'bar'); + fn('foo', undefined); expect(() => - jestExpect(fn)[calledWith]('foo', 'bar'), + caller(jestExpect(fn)[calledWith], 'foo'), ).toThrowErrorMatchingSnapshot(); }); - }); - describe('nthCalledWith', () => { - test(`nthCalledWith`, () => { + test(`works with Map`, () => { const fn = jest.fn(); - fn('foo1', 'bar'); - fn('foo', 'bar1'); - fn('foo', 'bar'); - jestExpect(fn).nthCalledWith(1, 'foo1', 'bar'); - jestExpect(fn).nthCalledWith(2, 'foo', 'bar1'); - jestExpect(fn).nthCalledWith(3, 'foo', 'bar'); + const m1 = new Map([[1, 2], [2, 1]]); + const m2 = new Map([[1, 2], [2, 1]]); + const m3 = new Map([['a', 'b'], ['b', 'a']]); - expect(() => { - jestExpect(fn).not.nthCalledWith(1, 'foo1', 'bar'); - jestExpect(fn).not.nthCalledWith(2, 'foo', 'bar1'); - jestExpect(fn).not.nthCalledWith(3, 'foo', 'bar'); - }).toThrowErrorMatchingSnapshot(); - }); + fn(m1); - it('should replace 1st, 2nd, 3rd with first, second, third', async () => { - const fn = jest.fn(); - fn('foo1', 'bar'); - fn('foo', 'bar1'); - fn('foo', 'bar'); + caller(jestExpect(fn)[calledWith], m2); + caller(jestExpect(fn).not[calledWith], m3); - expect(() => { - jestExpect(fn).nthCalledWith(1, 'foo', 'bar'); - jestExpect(fn).nthCalledWith(2, 'foo', 'bar'); - jestExpect(fn).nthCalledWith(3, 'foo1', 'bar'); - }).toThrowErrorMatchingSnapshot(); - - expect(() => { - jestExpect(fn).not.nthCalledWith(1, 'foo1', 'bar'); - jestExpect(fn).not.nthCalledWith(2, 'foo', 'bar1'); - jestExpect(fn).not.nthCalledWith(3, 'foo', 'bar'); - }).toThrowErrorMatchingSnapshot(); + expect(() => + caller(jestExpect(fn).not[calledWith], m2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + caller(jestExpect(fn)[calledWith], m3), + ).toThrowErrorMatchingSnapshot(); }); - it('should reject nth value smaller than 1', async () => { + test(`works with Set`, () => { const fn = jest.fn(); - fn('foo1', 'bar'); - expect(() => { - jestExpect(fn).nthCalledWith(0, 'foo1', 'bar'); - }).toThrowErrorMatchingSnapshot(); + const s1 = new Set([1, 2]); + const s2 = new Set([1, 2]); + const s3 = new Set([3, 4]); + + fn(s1); + + caller(jestExpect(fn)[calledWith], s2); + caller(jestExpect(fn).not[calledWith], s3); + + expect(() => + caller(jestExpect(fn).not[calledWith], s2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + caller(jestExpect(fn)[calledWith], s3), + ).toThrowErrorMatchingSnapshot(); }); - it('should reject non integer nth value', async () => { + test(`works with Immutable.js objects`, () => { const fn = jest.fn(); - fn('foo1', 'bar'); + const directlyCreated = new Immutable.Map([['a', {b: 'c'}]]); + const indirectlyCreated = new Immutable.Map().set('a', {b: 'c'}); + fn(directlyCreated, indirectlyCreated); + + caller(jestExpect(fn)[calledWith], indirectlyCreated, directlyCreated); - expect(() => { - jestExpect(fn).nthCalledWith(0.1, 'foo1', 'bar'); - }).toThrowErrorMatchingSnapshot(); + expect(() => + caller( + jestExpect(fn).not[calledWith], + indirectlyCreated, + directlyCreated, + ), + ).toThrowErrorMatchingSnapshot(); }); + + const basicCalledWith = [ + 'lastCalledWith', + 'toHaveBeenLastCalledWith', + 'toBeCalledWith', + 'toHaveBeenCalledWith', + ]; + + if (basicCalledWith.indexOf(calledWith) >= 0) { + test(`works with many arguments`, () => { + const fn = jest.fn(); + fn('foo1', 'bar'); + fn('foo', 'bar1'); + fn('foo', 'bar'); + + jestExpect(fn)[calledWith]('foo', 'bar'); + + expect(() => + jestExpect(fn).not[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); + + test(`works with many arguments that don't match`, () => { + const fn = jest.fn(); + fn('foo', 'bar1'); + fn('foo', 'bar2'); + fn('foo', 'bar3'); + + jestExpect(fn).not[calledWith]('foo', 'bar'); + + expect(() => + jestExpect(fn)[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); + } + + const nthCalled = ['toHaveBeenNthCalledWith', 'nthCalledWith']; + if (nthCalled.indexOf(calledWith) >= 0) { + test(`works with three calls`, () => { + const fn = jest.fn(); + fn('foo1', 'bar'); + fn('foo', 'bar1'); + fn('foo', 'bar'); + + jestExpect(fn)[calledWith](1, 'foo1', 'bar'); + jestExpect(fn)[calledWith](2, 'foo', 'bar1'); + jestExpect(fn)[calledWith](3, 'foo', 'bar'); + + expect(() => { + jestExpect(fn).not[calledWith](1, 'foo1', 'bar'); + jestExpect(fn).not[calledWith](2, 'foo', 'bar1'); + jestExpect(fn).not[calledWith](3, 'foo', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('should replace 1st, 2nd, 3rd with first, second, third', async () => { + const fn = jest.fn(); + fn('foo1', 'bar'); + fn('foo', 'bar1'); + fn('foo', 'bar'); + + expect(() => { + jestExpect(fn)[calledWith](1, 'foo', 'bar'); + jestExpect(fn)[calledWith](2, 'foo', 'bar'); + jestExpect(fn)[calledWith](3, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + + expect(() => { + jestExpect(fn).not[calledWith](1, 'foo1', 'bar'); + jestExpect(fn).not[calledWith](2, 'foo', 'bar1'); + jestExpect(fn).not[calledWith](3, 'foo', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('should reject nth value smaller than 1', async () => { + const fn = jest.fn(); + fn('foo1', 'bar'); + + expect(() => { + jestExpect(fn)[calledWith](0, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('should reject non integer nth value', async () => { + const fn = jest.fn(); + fn('foo1', 'bar'); + + expect(() => { + jestExpect(fn)[calledWith](0.1, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + } }); }); diff --git a/packages/expect/src/spy_matchers.js b/packages/expect/src/spy_matchers.js index f3fc7d817e67..f1e4e7585dd4 100644 --- a/packages/expect/src/spy_matchers.js +++ b/packages/expect/src/spy_matchers.js @@ -54,6 +54,37 @@ const createToBeCalledMatcher = matcherName => (received, expected) => { return {message, pass}; }; +const createToBeCalledTimesMatcher = (matcherName: string) => ( + received: any, + expected: number, +) => { + ensureExpectedIsNumber(expected, matcherName); + ensureMock(received, matcherName); + + const receivedIsSpy = isSpy(received); + const type = receivedIsSpy ? 'spy' : 'mock function'; + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + const count = receivedIsSpy + ? received.calls.count() + : received.mock.calls.length; + const pass = count === expected; + const message = pass + ? () => + matcherHint('.not' + matcherName, receivedName, String(expected)) + + `\n\n` + + `Expected ${type} not to be called ` + + `${EXPECTED_COLOR(pluralize('time', expected))}, but it was` + + ` called exactly ${RECEIVED_COLOR(pluralize('time', count))}.` + : () => + matcherHint(matcherName, receivedName, String(expected)) + + '\n\n' + + `Expected ${type} to have been called ` + + `${EXPECTED_COLOR(pluralize('time', expected))},` + + ` but it was called ${RECEIVED_COLOR(pluralize('time', count))}.`; + + return {message, pass}; +}; + const createToBeCalledWithMatcher = matcherName => ( received: any, ...expected: any @@ -116,83 +147,65 @@ const createLastCalledWithMatcher = matcherName => ( return {message, pass}; }; -const spyMatchers: MatchersObject = { - lastCalledWith: createLastCalledWithMatcher('.lastCalledWith'), - nthCalledWith(received: any, nth: number, ...expected: any) { - const matcherName = '.nthCalledWith'; - ensureMock(received, matcherName); +const createNthCalledWithMatcher = (matcherName: string) => ( + received: any, + nth: number, + ...expected: any +) => { + ensureMock(received, matcherName); + + const receivedIsSpy = isSpy(received); + const type = receivedIsSpy ? 'spy' : 'mock function'; + + if (typeof nth !== 'number' || parseInt(nth, 10) !== nth || nth < 1) { + const message = () => + `nth value ${printReceived( + nth, + )} must be a positive integer greater than ${printExpected(0)}`; + const pass = false; + return {message, pass}; + } - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + const calls = receivedIsSpy + ? received.calls.all().map(x => x.args) + : received.mock.calls; + const pass = equals(calls[nth - 1], expected, [iterableEquality]); - if (typeof nth !== 'number' || parseInt(nth, 10) !== nth || nth < 1) { - const message = () => - `nth value ${printReceived( + const message = pass + ? () => + matcherHint('.not' + matcherName, receivedName) + + '\n\n' + + `Expected ${type} ${nthToString( nth, - )} must be a positive integer greater than ${printExpected(0)}`; - const pass = false; - return {message, pass}; - } + )} call to not have been called with:\n` + + ` ${printExpected(expected)}` + : () => + matcherHint(matcherName, receivedName) + + '\n\n' + + `Expected ${type} ${nthToString( + nth, + )} call to have been called with:\n` + + formatMismatchedCalls(calls, expected, LAST_CALL_PRINT_LIMIT); - const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); - const calls = receivedIsSpy - ? received.calls.all().map(x => x.args) - : received.mock.calls; - const pass = equals(calls[nth - 1], expected, [iterableEquality]); - - const message = pass - ? () => - matcherHint('.not' + matcherName, receivedName) + - '\n\n' + - `Expected ${type} ${nthToString( - nth, - )} call to not have been called with:\n` + - ` ${printExpected(expected)}` - : () => - matcherHint(matcherName, receivedName) + - '\n\n' + - `Expected ${type} ${nthToString( - nth, - )} call to have been called with:\n` + - formatMismatchedCalls(calls, expected, LAST_CALL_PRINT_LIMIT); + return {message, pass}; +}; - return {message, pass}; - }, +const spyMatchers: MatchersObject = { + lastCalledWith: createLastCalledWithMatcher('.lastCalledWith'), + nthCalledWith: createNthCalledWithMatcher('.nthCalledWith'), toBeCalled: createToBeCalledMatcher('.toBeCalled'), + toBeCalledTimes: createToBeCalledTimesMatcher('.toBeCalledTimes'), toBeCalledWith: createToBeCalledWithMatcher('.toBeCalledWith'), toHaveBeenCalled: createToBeCalledMatcher('.toHaveBeenCalled'), - toHaveBeenCalledTimes(received: any, expected: number) { - const matcherName = '.toHaveBeenCalledTimes'; - ensureExpectedIsNumber(expected, matcherName); - ensureMock(received, matcherName); - - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; - const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); - const count = receivedIsSpy - ? received.calls.count() - : received.mock.calls.length; - const pass = count === expected; - const message = pass - ? () => - matcherHint('.not' + matcherName, receivedName, String(expected)) + - `\n\n` + - `Expected ${type} not to be called ` + - `${EXPECTED_COLOR(pluralize('time', expected))}, but it was` + - ` called exactly ${RECEIVED_COLOR(pluralize('time', count))}.` - : () => - matcherHint(matcherName, receivedName, String(expected)) + - '\n\n' + - `Expected ${type} to have been called ` + - `${EXPECTED_COLOR(pluralize('time', expected))},` + - ` but it was called ${RECEIVED_COLOR(pluralize('time', count))}.`; - - return {message, pass}; - }, + toHaveBeenCalledTimes: createToBeCalledTimesMatcher('.toHaveBeenCalledTimes'), toHaveBeenCalledWith: createToBeCalledWithMatcher('.toHaveBeenCalledWith'), toHaveBeenLastCalledWith: createLastCalledWithMatcher( '.toHaveBeenLastCalledWith', ), + toHaveBeenNthCalledWith: createNthCalledWithMatcher( + '.toHaveBeenNthCalledWith', + ), }; const isSpy = spy => spy.calls && typeof spy.calls.count === 'function'; From e5837cff7dad1e8c9da5e3cac9b5d7b13025849d Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 26 Mar 2018 20:19:29 -0700 Subject: [PATCH 35/37] Added link to Mercurial (#5877) --- CONTRIBUTING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7f4216384d91..b1e1176ca119 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,8 +73,9 @@ _Before_ submitting a pull request, please make sure the following is done… 5. If you've changed APIs, update the documentation. 6. Ensure the test suite passes via `yarn test`. To run the test suite you may - need to install Mercurial (`hg`). On macOS, this can be done using - [homebrew](http://brew.sh/): `brew install hg`. + need to install [Mercurial](https://www.mercurial-scm.org/) (`hg`). On + macOS, this can be done using [homebrew](http://brew.sh/): + `brew install hg`. ```sh brew install hg # maybe From 5ec4092f97527b5dddd5f08d060e5b19045c15cd Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Tue, 27 Mar 2018 10:17:01 -0400 Subject: [PATCH 36/37] Add jest-silent-reporter (#5881) --- package.json | 5 +++-- yarn.lock | 29 ++++++++++++++++++----------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 612dc7e98196..c39b78eba4b8 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "istanbul-api": "^1.3.1", "istanbul-lib-coverage": "^1.0.0", "jasmine-reporters": "^2.2.0", + "jest-silent-reporter": "^0.0.4", "jquery": "^3.2.1", "karma": "^2.0.0", "karma-browserify": "^5.1.1", @@ -92,8 +93,8 @@ "postinstall": "yarn build", "publish": "yarn build-clean && yarn build && lerna publish --silent", "test-ci-es5-build-in-browser": "karma start --single-run", - "test-ci": "yarn typecheck && yarn lint && yarn lint-es5-build && yarn lint:md:ci && yarn jest-coverage -i && node scripts/mapCoverage.js && codecov", - "test-ci-partial": "yarn jest -i", + "test-ci": "yarn typecheck && yarn lint && yarn lint-es5-build && yarn lint:md:ci && yarn jest-coverage -i --reporters jest-silent-reporter && node scripts/mapCoverage.js && codecov", + "test-ci-partial": "yarn jest -i --reporters jest-silent-reporter", "test-pretty-format-perf": "node packages/pretty-format/perf/test.js", "test": "yarn typecheck && yarn lint && yarn jest", "typecheck": "flow check --include-warnings", diff --git a/yarn.lock b/yarn.lock index c5c74c05a2d8..c31206ad02ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -191,9 +191,9 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" @@ -1803,13 +1803,13 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: - ansi-styles "^3.2.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^5.2.0" + supports-color "^5.3.0" character-entities-legacy@^1.0.0: version "1.1.1" @@ -5010,6 +5010,13 @@ jest-haste-map@^21: sane "^2.0.0" worker-farm "^1.3.1" +jest-silent-reporter@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/jest-silent-reporter/-/jest-silent-reporter-0.0.4.tgz#906f41790ee758cd1682d33263538df20d43074e" + dependencies: + chalk "^2.3.1" + jest-util "^22.3.0" + jquery@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -8438,9 +8445,9 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" -supports-color@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" +supports-color@^5.2.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: has-flag "^3.0.0" From 5bd6ee166a5a85749e2c8b790610f2b0af6df838 Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Tue, 27 Mar 2018 11:06:31 -0400 Subject: [PATCH 37/37] Backfill 22.x docs (#5822) --- crowdin.yaml | 4 + docs/CLI.md | 4 - docs/Configuration.md | 16 - docs/ExpectAPI.md | 4 - docs/JestObjectAPI.md | 6 - docs/MockFunctionAPI.md | 12 - docs/MockFunctions.md | 2 - docs/TestingAsyncCode.md | 5 +- docs/TutorialAsync.md | 4 - website/pages/en/versions.js | 2 +- website/versioned_docs/version-22.0/CLI.md | 318 +++++ .../version-22.0/Configuration.md | 1087 ++++++++++++++++ .../versioned_docs/version-22.0/ExpectAPI.md | 1060 ++++++++++++++++ .../version-22.0/GettingStarted.md | 156 +++ .../versioned_docs/version-22.0/GlobalAPI.md | 413 +++++++ .../version-22.0/JestObjectAPI.md | 483 ++++++++ .../version-22.0/JestPlatform.md | 197 +++ .../version-22.0/ManualMocks.md | 157 +++ .../version-22.0/MigrationGuide.md | 48 + .../version-22.0/MockFunctionAPI.md | 241 ++++ .../version-22.0/MockFunctions.md | 279 +++++ .../version-22.0/MoreResources.md | 41 + .../versioned_docs/version-22.0/Puppeteer.md | 103 ++ .../version-22.0/SetupAndTeardown.md | 222 ++++ .../version-22.0/SnapshotTesting.md | 222 ++++ .../version-22.0/TestingAsyncCode.md | 160 +++ .../version-22.0/TestingFrameworks.md | 39 + .../versioned_docs/version-22.0/TimerMocks.md | 182 +++ .../version-22.0/Troubleshooting.md | 317 +++++ .../version-22.0/TutorialAsync.md | 190 +++ .../version-22.0/TutorialReact.md | 302 +++++ .../version-22.0/TutorialReactNative.md | 285 +++++ .../version-22.0/TutorialjQuery.md | 80 ++ .../version-22.0/UsingMatchers.md | 175 +++ .../versioned_docs/version-22.0/Webpack.md | 280 +++++ .../version-22.1/Configuration.md | 1079 ++++++++++++++++ .../versioned_docs/version-22.1/ExpectAPI.md | 1054 ++++++++++++++++ .../version-22.1/GettingStarted.md | 156 +++ .../version-22.1/JestObjectAPI.md | 477 +++++++ .../version-22.1/MigrationGuide.md | 48 + .../version-22.1/MockFunctionAPI.md | 240 ++++ .../version-22.1/SnapshotTesting.md | 222 ++++ .../version-22.1/Troubleshooting.md | 317 +++++ .../version-22.1/TutorialReact.md | 339 +++++ .../version-22.1/TutorialReactNative.md | 286 +++++ .../versioned_docs/version-22.1/Webpack.md | 281 +++++ website/versioned_docs/version-22.2/CLI.md | 324 +++++ .../version-22.2/Configuration.md | 1095 +++++++++++++++++ .../version-22.2/Es6ClassMocks.md | 392 ++++++ .../versioned_docs/version-22.2/ExpectAPI.md | 1054 ++++++++++++++++ .../version-22.2/GettingStarted.md | 156 +++ .../versioned_docs/version-22.2/GlobalAPI.md | 413 +++++++ .../version-22.2/JestObjectAPI.md | 478 +++++++ .../version-22.2/JestPlatform.md | 197 +++ .../version-22.2/ManualMocks.md | 157 +++ .../version-22.2/MigrationGuide.md | 48 + .../version-22.2/MockFunctionAPI.md | 324 +++++ .../version-22.2/MockFunctions.md | 277 +++++ .../version-22.2/MoreResources.md | 41 + .../versioned_docs/version-22.2/Puppeteer.md | 103 ++ .../version-22.2/SetupAndTeardown.md | 222 ++++ .../version-22.2/SnapshotTesting.md | 222 ++++ .../version-22.2/TestingAsyncCode.md | 157 +++ .../version-22.2/TestingFrameworks.md | 39 + .../versioned_docs/version-22.2/TimerMocks.md | 182 +++ .../version-22.2/Troubleshooting.md | 317 +++++ .../version-22.2/TutorialAsync.md | 186 +++ .../version-22.2/TutorialReact.md | 339 +++++ .../version-22.2/TutorialReactNative.md | 286 +++++ .../version-22.2/TutorialjQuery.md | 80 ++ .../version-22.2/UsingMatchers.md | 175 +++ .../versioned_docs/version-22.2/Webpack.md | 281 +++++ website/versioned_docs/version-22.3/CLI.md | 4 - .../version-22.3/Configuration.md | 16 - .../versioned_docs/version-22.3/ExpectAPI.md | 6 - .../version-22.3/JestObjectAPI.md | 6 - .../version-22.3/MockFunctionAPI.md | 4 - .../version-22.3/MockFunctions.md | 2 - .../version-22.3/TestingAsyncCode.md | 5 +- .../version-22.3/TutorialAsync.md | 4 - website/versioned_docs/version-22.4/CLI.md | 4 - .../version-22.4/Configuration.md | 16 - .../versioned_docs/version-22.4/ExpectAPI.md | 4 - .../version-22.4/JestObjectAPI.md | 6 - .../version-22.4/MockFunctionAPI.md | 12 - .../version-22.4/MockFunctions.md | 2 - .../version-22.0-sidebars.json | 36 + .../version-22.1-sidebars.json | 36 + .../version-22.2-sidebars.json | 37 + website/versions.json | 5 +- 90 files changed, 19198 insertions(+), 147 deletions(-) create mode 100644 website/versioned_docs/version-22.0/CLI.md create mode 100644 website/versioned_docs/version-22.0/Configuration.md create mode 100644 website/versioned_docs/version-22.0/ExpectAPI.md create mode 100644 website/versioned_docs/version-22.0/GettingStarted.md create mode 100644 website/versioned_docs/version-22.0/GlobalAPI.md create mode 100644 website/versioned_docs/version-22.0/JestObjectAPI.md create mode 100644 website/versioned_docs/version-22.0/JestPlatform.md create mode 100644 website/versioned_docs/version-22.0/ManualMocks.md create mode 100644 website/versioned_docs/version-22.0/MigrationGuide.md create mode 100644 website/versioned_docs/version-22.0/MockFunctionAPI.md create mode 100644 website/versioned_docs/version-22.0/MockFunctions.md create mode 100644 website/versioned_docs/version-22.0/MoreResources.md create mode 100644 website/versioned_docs/version-22.0/Puppeteer.md create mode 100644 website/versioned_docs/version-22.0/SetupAndTeardown.md create mode 100644 website/versioned_docs/version-22.0/SnapshotTesting.md create mode 100644 website/versioned_docs/version-22.0/TestingAsyncCode.md create mode 100644 website/versioned_docs/version-22.0/TestingFrameworks.md create mode 100644 website/versioned_docs/version-22.0/TimerMocks.md create mode 100644 website/versioned_docs/version-22.0/Troubleshooting.md create mode 100644 website/versioned_docs/version-22.0/TutorialAsync.md create mode 100644 website/versioned_docs/version-22.0/TutorialReact.md create mode 100644 website/versioned_docs/version-22.0/TutorialReactNative.md create mode 100644 website/versioned_docs/version-22.0/TutorialjQuery.md create mode 100644 website/versioned_docs/version-22.0/UsingMatchers.md create mode 100644 website/versioned_docs/version-22.0/Webpack.md create mode 100644 website/versioned_docs/version-22.1/Configuration.md create mode 100644 website/versioned_docs/version-22.1/ExpectAPI.md create mode 100644 website/versioned_docs/version-22.1/GettingStarted.md create mode 100644 website/versioned_docs/version-22.1/JestObjectAPI.md create mode 100644 website/versioned_docs/version-22.1/MigrationGuide.md create mode 100644 website/versioned_docs/version-22.1/MockFunctionAPI.md create mode 100644 website/versioned_docs/version-22.1/SnapshotTesting.md create mode 100644 website/versioned_docs/version-22.1/Troubleshooting.md create mode 100644 website/versioned_docs/version-22.1/TutorialReact.md create mode 100644 website/versioned_docs/version-22.1/TutorialReactNative.md create mode 100644 website/versioned_docs/version-22.1/Webpack.md create mode 100644 website/versioned_docs/version-22.2/CLI.md create mode 100644 website/versioned_docs/version-22.2/Configuration.md create mode 100644 website/versioned_docs/version-22.2/Es6ClassMocks.md create mode 100644 website/versioned_docs/version-22.2/ExpectAPI.md create mode 100644 website/versioned_docs/version-22.2/GettingStarted.md create mode 100644 website/versioned_docs/version-22.2/GlobalAPI.md create mode 100644 website/versioned_docs/version-22.2/JestObjectAPI.md create mode 100644 website/versioned_docs/version-22.2/JestPlatform.md create mode 100644 website/versioned_docs/version-22.2/ManualMocks.md create mode 100644 website/versioned_docs/version-22.2/MigrationGuide.md create mode 100644 website/versioned_docs/version-22.2/MockFunctionAPI.md create mode 100644 website/versioned_docs/version-22.2/MockFunctions.md create mode 100644 website/versioned_docs/version-22.2/MoreResources.md create mode 100644 website/versioned_docs/version-22.2/Puppeteer.md create mode 100644 website/versioned_docs/version-22.2/SetupAndTeardown.md create mode 100644 website/versioned_docs/version-22.2/SnapshotTesting.md create mode 100644 website/versioned_docs/version-22.2/TestingAsyncCode.md create mode 100644 website/versioned_docs/version-22.2/TestingFrameworks.md create mode 100644 website/versioned_docs/version-22.2/TimerMocks.md create mode 100644 website/versioned_docs/version-22.2/Troubleshooting.md create mode 100644 website/versioned_docs/version-22.2/TutorialAsync.md create mode 100644 website/versioned_docs/version-22.2/TutorialReact.md create mode 100644 website/versioned_docs/version-22.2/TutorialReactNative.md create mode 100644 website/versioned_docs/version-22.2/TutorialjQuery.md create mode 100644 website/versioned_docs/version-22.2/UsingMatchers.md create mode 100644 website/versioned_docs/version-22.2/Webpack.md create mode 100644 website/versioned_sidebars/version-22.0-sidebars.json create mode 100644 website/versioned_sidebars/version-22.1-sidebars.json create mode 100644 website/versioned_sidebars/version-22.2-sidebars.json diff --git a/crowdin.yaml b/crowdin.yaml index 10f14763c74f..40a2a93b3499 100644 --- a/crowdin.yaml +++ b/crowdin.yaml @@ -43,6 +43,10 @@ files: 'vi': 'vi' 'zh-CN': 'zh-Hans' 'zh-TW': 'zh-Hant' + - + source: '/website/versioned_docs/**/*.md' + translation: '/website/translated_docs/%locale%/**/%original_file_name%' + languages_mapping: *anchor - source: '/website/i18n/en.json' translation: '/website/i18n/%locale%.json' diff --git a/docs/CLI.md b/docs/CLI.md index e30350ad48c2..78b8de50915c 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -129,8 +129,6 @@ commit. Behaves similarly to `--onlyChanged`. ### `--changedSince` -##### available in Jest **22.2.0+** - Runs tests related the changes since the provided branch. If the current branch has diverged from the given branch, then only changes made locally will be tested. Behaves similarly to `--onlyChanged`. @@ -144,8 +142,6 @@ fail the test and require Jest to be run with `--updateSnapshot`. ### `--clearCache` -##### available in Jest **22.0.0+** - Deletes the Jest cache directory and then exits without running tests. Will delete `cacheDirectory` if the option is passed, or Jest's default cache directory. The default cache directory can be found by calling diff --git a/docs/Configuration.md b/docs/Configuration.md index 8bd5fb458fc1..343e6d98aaa7 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -506,8 +506,6 @@ tests._ Default: `undefined` -##### available in Jest **20.0.0+** - Use this configuration option to add custom reporters to Jest. A custom reporter is a class that implements `onRunStart`, `onTestStart`, `onTestResult`, `onRunComplete` methods that will be called when any of those events occurs. @@ -606,8 +604,6 @@ programmatically using [`jest.resetModules()`](#jest-resetmodules). Default: `undefined` -##### available in Jest **20.0.0+** - This option allows the use of a custom resolver. This resolver must be a node module that exports a function expecting a string as the first argument for the path to resolve and an object with the following structure as the second @@ -677,8 +673,6 @@ where you may want to have multiple roots within one project, for example ### `runner` [string] -##### available in Jest **21.0.0+** - Default: `"jest-runner"` This option allows you to use a custom runner instead of Jest's default test @@ -816,8 +810,6 @@ you can use the `node` option to use a node-like environment instead. If some tests require another environment, you can add a `@jest-environment` docblock. -##### available in Jest **20.0.0+** - ```js /** * @jest-environment jsdom @@ -835,8 +827,6 @@ environment. The module must export a class with `setup`, `teardown` and suites by assigning them to `this.global` object – this will make them available in your test suites as global variables. -##### available in Jest **22.0.0+** - _Note: TestEnvironment is sandboxed. Each test suite will trigger setup/teardown in their own TestEnvironment._ @@ -880,8 +870,6 @@ beforeAll(() => { ### `testEnvironmentOptions` [Object] -##### available in Jest **22.0.0+** - Default: `{}` Test environment options that will be passed to the `testEnvironment`. The @@ -891,8 +879,6 @@ given to [jsdom](https://github.com/tmpvar/jsdom) such as ### `testMatch` [array] -##### available in Jest **19.0.0+** - (default: `[ '**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)' ]`) The glob patterns Jest uses to detect test files. By default it looks for `.js` @@ -1110,8 +1096,6 @@ errors will also still be shown on the bottom after execution. Default: `[]` -##### available in Jest **21.0.0+** - An array of RegExp patterns that are matched against all source file paths before re-running tests in watch mode. If the file path matches any of the patterns, when it is updated, it will not trigger a re-run of tests. diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 2fc3e849d086..8399372cfb95 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -455,8 +455,6 @@ test('the best flavor is not coconut', () => { ### `.resolves` -##### available in Jest **20.0.0+** - Use `resolves` to unwrap the value of a fulfilled promise so any other matcher can be chained. If the promise is rejected the assertion fails. @@ -485,8 +483,6 @@ test('resolves to lemon', async () => { ### `.rejects` -##### available in Jest **20.0.0+** - Use `.rejects` to unwrap the reason of a rejected promise so any other matcher can be chained. If the promise is fulfilled the assertion fails. diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 3169bd70244f..65dc9d6381f1 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -314,8 +314,6 @@ Returns the `jest` object for chaining. ### `jest.restoreAllMocks()` -##### available in Jest **21.1.0+** - Restores all mocks back to their original value. Equivalent to calling `.mockRestore` on every mocked function. Beware that `jest.restoreAllMocks()` only works when mock was created with `jest.spyOn`; other mocks will require you @@ -464,8 +462,6 @@ Returns the `jest` object for chaining. ### `jest.spyOn(object, methodName)` -##### available in Jest **19.0.0+** - Creates a mock function similar to `jest.fn` but also tracks calls to `object[methodName]`. Returns a Jest mock function. @@ -506,8 +502,6 @@ test('plays video', () => { ### `jest.spyOn(object, methodName, accessType?)` -##### available in Jest **22.1.0+** - Since Jest 22.1.0+, the `jest.spyOn` method takes an optional third argument of `accessType` that can be either `'get'` or `'set'`, which proves to be useful when you want to spy on a getter or a setter, respectively. diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index cef48922b208..fd0d83e45a0d 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -18,8 +18,6 @@ implementation is given, the mock function will return `undefined` when invoked. ### `mockFn.getMockName()` -##### available in Jest **22.0.0+** - Returns the mock name string set by calling `mockFn.mockName(value)`. ### `mockFn.mock.calls` @@ -211,8 +209,6 @@ console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); ### `mockFn.mockName(value)` -##### available in Jest **22.0.0+** - Accepts a string to use in test result output in place of "jest.fn()" to indicate which mock function is being referenced. @@ -274,8 +270,6 @@ console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); ### `mockFn.mockResolvedValue(value)` -##### available in Jest **22.2.0+** - Simple sugar function for: ```js @@ -294,8 +288,6 @@ test('async test', async () => { ### `mockFn.mockResolvedValueOnce(value)` -##### available in Jest **22.2.0+** - Simple sugar function for: ```js @@ -321,8 +313,6 @@ test('async test', async () => { ### `mockFn.mockRejectedValue(value)` -##### available in Jest **22.2.0+** - Simple sugar function for: ```js @@ -341,8 +331,6 @@ test('async test', async () => { ### `mockFn.mockRejectedValueOnce(value)` -##### available in Jest **22.2.0+** - Simple sugar function for: ```js diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index 074fc4682c5f..177da5cbee82 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -266,8 +266,6 @@ const otherObj = { ## Mock Names -##### available in Jest **22.0.0+** - You can optionally provide a name for your mock functions, which will be displayed instead of "jest.fn()" in test error output. Use this if you want to be able to quickly identify the mock function reporting an error in your test diff --git a/docs/TestingAsyncCode.md b/docs/TestingAsyncCode.md index 72abbbd4febc..2a9e89b8b78a 100644 --- a/docs/TestingAsyncCode.md +++ b/docs/TestingAsyncCode.md @@ -86,8 +86,6 @@ test('the fetch fails with an error', () => { ### `.resolves` / `.rejects` -##### available in Jest **20.0.0+** - You can also use the `.resolves` matcher in your expect statement, and Jest will wait for that promise to resolve. If the promise is rejected, the test will automatically fail. @@ -136,8 +134,7 @@ test('the fetch fails with an error', async () => { }); ``` -Of course, you can combine `async` and `await` with `.resolves` or `.rejects` -(available in Jest **20.0.0+**). +Of course, you can combine `async` and `await` with `.resolves` or `.rejects`. ```js test('the data is peanut butter', async () => { diff --git a/docs/TutorialAsync.md b/docs/TutorialAsync.md index 19c254e89984..fc25c724db07 100644 --- a/docs/TutorialAsync.md +++ b/docs/TutorialAsync.md @@ -90,8 +90,6 @@ return a Promise at the end. ### `.resolves` -##### available in Jest **20.0.0+** - There is a less verbose way using `resolves` to unwrap the value of a fulfilled promise together with any other matcher. If the promise is rejected, the assertion will fail. @@ -159,8 +157,6 @@ it('tests error with async/await', async () => { ### `.rejects` -##### available in Jest **20.0.0+** - The`.rejects` helper works like the `.resolves` helper. If the promise is fulfilled, the test will automatically fail. diff --git a/website/pages/en/versions.js b/website/pages/en/versions.js index 691b2681b7a9..726d4be16cff 100644 --- a/website/pages/en/versions.js +++ b/website/pages/en/versions.js @@ -79,7 +79,7 @@ class Versions extends React.Component { version => version !== latestVersion && ( - {version} + {version === '22.0' ? '<=22' : version} + +--- + +## Reference + +### `jest ` + +When you run `jest` with an argument, that argument is treated as a regular +expression to match against files in your project. It is possible to run test +suites by providing a pattern. Only the files that the pattern matches will be +picked up and executed. Note: depending on your terminal, you may need to quote +this argument: `jest "my.*(complex)?pattern"`. + +### `--bail` + +Alias: `-b`. Exit the test suite immediately upon the first failing test suite. + +### `--cache` + +Whether to use the cache. Defaults to true. Disable the cache using +`--no-cache`. _Note: the cache should only be disabled if you are experiencing +caching related problems. On average, disabling the cache makes Jest at least +two times slower._ + +If you want to inspect the cache, use `--showConfig` and look at the +`cacheDirectory` value. If you need to clear the cache, use `--clearCache`. + +### `--changedFilesWithAncestor` + +When used together with `--onlyChanged` or `--watch`, it runs tests related to +the current changes and the changes made in the last commit. + +### `--ci` + +When this option is provided, Jest will assume it is running in a CI +environment. This changes the behavior when a new snapshot is encountered. +Instead of the regular behavior of storing a new snapshot automatically, it will +fail the test and require Jest to be run with `--updateSnapshot`. + +### `--clearCache` + +##### available in Jest **22.0.0+** + +Deletes the Jest cache directory and then exits without running tests. Will +delete `cacheDirectory` if the option is passed, or Jest's default cache +directory. The default cache directory can be found by calling +`jest --showConfig`. _Note: clearing the cache will reduce performance._ + +### `--collectCoverageFrom=` + +Relative to the root directory, glob pattern matching the files that coverage +info needs to be collected from. + +### `--colors` + +Forces test results output highlighting even if stdout is not a TTY. + +### `--config=` + +Alias: `-c`. The path to a Jest config file specifying how to find and execute +tests. If no `rootDir` is set in the config, the current directory is assumed to +be the rootDir for the project. This can also be a JSON-encoded value which Jest +will use as configuration. + +### `--coverage` + +Indicates that test coverage information should be collected and reported in the +output. + +### `--debug` + +Print debugging info about your Jest config. + +### `--env=` + +The test environment used for all tests. This can point to any file or node +module. Examples: `jsdom`, `node` or `path/to/my-environment.js`. + +### `--expand` + +Alias: `-e`. Use this flag to show full diffs and errors instead of a patch. + +### `--findRelatedTests ` + +Find and run the tests that cover a space separated list of source files that +were passed in as arguments. Useful for pre-commit hook integration to run the +minimal amount of tests necessary. + +### `--forceExit` + +Force Jest to exit after all tests have completed running. This is useful when +resources set up by test code cannot be adequately cleaned up. _Note: This +feature is an escape-hatch. If Jest doesn't exit at the end of a test run, it +means external resources are still being held on to or timers are still pending +in your code. It is advised to tear down external resources after each test to +make sure Jest can shut down cleanly._ + +### `--help` + +Show the help information, similar to this page. + +### `--json` + +Prints the test results in JSON. This mode will send all other test output and +user messages to stderr. + +### `--outputFile=` + +Write test results to a file when the `--json` option is also specified. + +### `--lastCommit` + +When used together with `--onlyChanged`, it will run all tests affected by file +changes in the last commit made. + +### `--listTests` + +Lists all tests as JSON that Jest will run given the arguments, and exits. This +can be used together with `--findRelatedTests` to know which tests Jest will +run. + +### `--logHeapUsage` + +Logs the heap usage after every test. Useful to debug memory leaks. Use together +with `--runInBand` and `--expose-gc` in node. + +### `--maxWorkers=` + +Alias: `-w`. Specifies the maximum number of workers the worker-pool will spawn +for running tests. This defaults to the number of the cores available on your +machine. It may be useful to adjust this in resource limited environments like +CIs but the default should be adequate for most use-cases. + +### `--noStackTrace` + +Disables stack trace in test results output. + +### `--notify` + +Activates notifications for test results. Good for when you don't want your +consciousness to be able to focus on anything except JavaScript testing. + +### `--onlyChanged` + +Alias: `-o`. Attempts to identify which tests to run based on which files have +changed in the current repository. Only works if you're running tests in a +git/hg repository at the moment and requires a static dependency graph (ie. no +dynamic requires). + +### `--passWithNoTests` + +Allows the test suite to pass when no files are found. + +### `--projects ... ` + +Run tests from one or more projects. + +### `--runInBand` + +Alias: `-i`. Run all tests serially in the current process, rather than creating +a worker pool of child processes that run tests. This can be useful for +debugging. + +### `--setupTestFrameworkScriptFile=` + +The path to a module that runs some code to configure or set up the testing +framework before each test. Beware that files imported by the setup script will +not be mocked during testing. + +### `--showConfig` + +Print your Jest config and then exits. + +### `--silent` + +Prevent tests from printing messages through the console. + +### `--testNamePattern=` + +Alias: `-t`. Run only tests and test suites with a name that matches the regex. +For example, suppose you want to run only tests related to authorization which +will have names like `"GET /api/posts with auth"`, then you can use +`jest -t=auth`. + +### `--testLocationInResults` + +Adds a `location` field to test results. Useful if you want to report the +location of a test in a reporter. + +Note that `column` is 0-indexed while `line` is not. + +```json +{ + "column": 4, + "line": 5 +} +``` + +### `--testPathPattern=` + +A regexp pattern string that is matched against all tests paths before executing +the test. + +### `--testRunner=` + +Lets you specify a custom test runner. + +### `--updateSnapshot` + +Alias: `-u`. Use this flag to re-record every snapshot that fails during this +test run. Can be used together with a test suite pattern or with +`--testNamePattern` to re-record snapshots. + +### `--useStderr` + +Divert all output to stderr. + +### `--verbose` + +Display individual test results with the test suite hierarchy. + +### `--version` + +Alias: `-v`. Print the version and exit. + +### `--watch` + +Watch files for changes and rerun tests related to changed files. If you want to +re-run all tests when a file has changed, use the `--watchAll` option instead. + +### `--watchAll` + +Watch files for changes and rerun all tests when something changes. If you want +to re-run only the tests that depend on the changed files, use the `--watch` +option. + +### `--watchman` + +Whether to use watchman for file crawling. Defaults to true. Disable using +`--no-watchman`. diff --git a/website/versioned_docs/version-22.0/Configuration.md b/website/versioned_docs/version-22.0/Configuration.md new file mode 100644 index 000000000000..35f40dc0768b --- /dev/null +++ b/website/versioned_docs/version-22.0/Configuration.md @@ -0,0 +1,1087 @@ +--- +id: version-22.0-configuration +title: Configuring Jest +original_id: configuration +--- + +Jest's configuration can be defined in the `package.json` file of your project, +or through a `jest.config.js` file or through the `--config ` +option. If you'd like to use your `package.json` to store Jest's config, the +"jest" key should be used on the top level so Jest will know how to find your +settings: + +```json +{ + "name": "my-project", + "jest": { + "verbose": true + } +} +``` + +Or through JavaScript: + +```js +// jest.config.js +module.exports = { + verbose: true, +}; +``` + +Please keep in mind that the resulting configuration must be JSON-serializable. + +When using the `--config` option, the JSON file must not contain a "jest" key: + +```json +{ + "bail": true, + "verbose": true +} +``` + +## Options + +These options let you control Jest's behavior in your `package.json` file. The +Jest philosophy is to work great by default, but sometimes you just need more +configuration power. + + + +--- + +## Reference + +### `automock` [boolean] + +Default: `false` + +This option is disabled by default. If you are introducing Jest to a large +organization with an existing codebase but few tests, enabling this option can +be helpful to introduce unit tests gradually. Modules can be explicitly +auto-mocked using `jest.mock(moduleName)`. + +_Note: Core modules, like `fs`, are not mocked by default. They can be mocked +explicitly, like `jest.mock('fs')`._ + +_Note: Automocking has a performance cost most noticeable in large projects. See +[here](troubleshooting.html#tests-are-slow-when-leveraging-automocking) for +details and a workaround._ + +### `browser` [boolean] + +Default: `false` + +Respect Browserify's +[`"browser"` field](https://github.com/substack/browserify-handbook#browser-field) +in `package.json` when resolving modules. Some modules export different versions +based on whether they are operating in Node or a browser. + +### `bail` [boolean] + +Default: `false` + +By default, Jest runs all tests and produces all errors into the console upon +completion. The bail config option can be used here to have Jest stop running +tests after the first failure. + +### `cacheDirectory` [string] + +Default: `"/tmp/"` + +The directory where Jest should store its cached dependency information. + +Jest attempts to scan your dependency tree once (up-front) and cache it in order +to ease some of the filesystem raking that needs to happen while running tests. +This config option lets you customize where Jest stores that cache data on disk. + +### `collectCoverage` [boolean] + +Default: `false` + +Indicates whether the coverage information should be collected while executing +the test. Because this retrofits all executed files with coverage collection +statements, it may significantly slow down your tests. + +### `collectCoverageFrom` [array] + +Default: `undefined` + +An array of [glob patterns](https://github.com/jonschlinkert/micromatch) +indicating a set of files for which coverage information should be collected. If +a file matches the specified glob pattern, coverage information will be +collected for it even if no tests exist for this file and it's never required in +the test suite. + +Example: + +```json +{ + "collectCoverageFrom": [ + "**/*.{js,jsx}", + "!**/node_modules/**", + "!**/vendor/**" + ] +} +``` + +This will collect coverage information for all the files inside the project's +`rootDir`, except the ones that match `**/node_modules/**` or `**/vendor/**`. + +_Note: This option requires `collectCoverage` to be set to true or Jest to be +invoked with `--coverage`._ + +### `coverageDirectory` [string] + +Default: `undefined` + +The directory where Jest should output its coverage files. + +### `coveragePathIgnorePatterns` [array] + +Default: `["/node_modules/"]` + +An array of regexp pattern strings that are matched against all file paths +before executing the test. If the file path matches any of the patterns, +coverage information will be skipped. + +These pattern strings match against the full path. Use the `` string +token to include the path to your project's root directory to prevent it from +accidentally ignoring all of your files in different environments that may have +different root directories. Example: +`["/build/", "/node_modules/"]`. + +### `coverageReporters` [array] + +Default: `["json", "lcov", "text"]` + +A list of reporter names that Jest uses when writing coverage reports. Any +[istanbul reporter](https://github.com/gotwarlost/istanbul/tree/master/lib/report) +can be used. + +_Note: Setting this option overwrites the default values. Add `"text"` or +`"text-summary"` to see a coverage summary in the console output._ + +### `coverageThreshold` [object] + +Default: `undefined` + +This will be used to configure minimum threshold enforcement for coverage +results. Thresholds can be specified as `global`, as a +[glob](https://github.com/isaacs/node-glob#glob-primer), and as a directory or +file path. If thresholds aren't met, jest will fail. Thresholds specified as a +positive number are taken to be the minimum percentage required. Thresholds +specified as a negative number represent the maximum number of uncovered +entities allowed. + +For example, with the following configuration jest will fail if there is less +than 80% branch, line, and function coverage, or if there are more than 10 +uncovered statements: + +```json +{ + ... + "jest": { + "coverageThreshold": { + "global": { + "branches": 80, + "functions": 80, + "lines": 80, + "statements": -10 + } + } + } +} +``` + +If globs or paths are specified alongside `global`, coverage data for matching +paths will be subtracted from overall coverage and thresholds will be applied +independently. Thresholds for globs are applied to all files matching the glob. +If the file specified by path is not found, error is returned. + +For example, with the following configuration: + +```json +{ + ... + "jest": { + "coverageThreshold": { + "global": { + "branches": 50, + "functions": 50, + "lines": 50, + "statements": 50 + }, + "./src/components/": { + "branches": 40, + "statements": 40 + }, + "./src/reducers/**/*.js": { + "statements": 90, + }, + "./src/api/very-important-module.js": { + "branches": 100, + "functions": 100, + "lines": 100, + "statements": 100 + } + } + } +} +``` + +Jest will fail if: + +* The `./src/components` directory has less than 40% branch or statement + coverage. +* One of the files matching the `./src/reducers/**/*.js` glob has less than 90% + statement coverage. +* The `./src/api/very-important-module.js` file has less than 100% coverage. +* Every remaining file combined has less than 50% coverage (`global`). + +### `forceCoverageMatch` [array] + +Default: `['']` + +Test files are normally ignored from collecting code coverage. With this option, +you can overwrite this behavior and include otherwise ignored files in code +coverage. + +For example, if you have tests in source files named with `.t.js` extension as +following: + +```javascript +// sum.t.js + +export function sum(a, b) { + return a + b; +} + +if (process.env.NODE_ENV === 'test') { + test('sum', () => { + expect(sum(1, 2)).toBe(3); + }); +} +``` + +You can collect coverage from those files with setting `forceCoverageMatch`. + +```json +{ + ... + "jest": { + "forceCoverageMatch": ["**/*.t.js"] + } +} +``` + +### `globals` [object] + +Default: `{}` + +A set of global variables that need to be available in all test environments. + +For example, the following would create a global `__DEV__` variable set to +`true` in all test environments: + +```json +{ + ... + "jest": { + "globals": { + "__DEV__": true + } + } +} +``` + +Note that, if you specify a global reference value (like an object or array) +here, and some code mutates that value in the midst of running a test, that +mutation will _not_ be persisted across test runs for other test files. + +### `globalSetup` [string] + +Default: `undefined` + +This option allows the use of a custom global setup module which exports an +async function that is triggered once before all test suites. + +### `globalTeardown` [string] + +Default: `undefined` + +This option allows the use of a custom global teardown module which exports an +async function that is triggered once after all test suites. + +### `mapCoverage` [boolean] + +##### available in Jest **20.0.0+** + +Default: `false` + +If you have [transformers](#transform-object-string-string) configured that emit +source maps, Jest will use them to try and map code coverage against the +original source code when writing [reports](#coveragereporters-array-string) and +checking [thresholds](#coveragethreshold-object). This is done on a best-effort +basis as some compile-to-JavaScript languages may provide more accurate source +maps than others. This can also be resource-intensive. If Jest is taking a long +time to calculate coverage at the end of a test run, try setting this option to +`false`. + +Both inline source maps and source maps returned directly from a transformer are +supported. Source map URLs are not supported because Jest may not be able to +locate them. To return source maps from a transformer, the `process` function +can return an object like the following. The `map` property may either be the +source map object, or the source map object as a JSON string. + +```js +return { + code: 'the code', + map: 'the source map', +}; +``` + +### `moduleFileExtensions` [array] + +Default: `["js", "json", "jsx", "node"]` + +An array of file extensions your modules use. If you require modules without +specifying a file extension, these are the extensions Jest will look for. + +If you are using TypeScript this should be `["js", "jsx", "json", "ts", "tsx"]`, +check [ts-jest's documentation](https://github.com/kulshekhar/ts-jest). + +### `moduleDirectories` [array] + +Default: `["node_modules"]` + +An array of directory names to be searched recursively up from the requiring +module's location. Setting this option will _override_ the default, if you wish +to still search `node_modules` for packages include it along with any other +options: `["node_modules", "bower_components"]` + +### `moduleNameMapper` [object] + +Default: `null` + +A map from regular expressions to module names that allow to stub out resources, +like images or styles with a single module. + +Modules that are mapped to an alias are unmocked by default, regardless of +whether automocking is enabled or not. + +Use `` string token to refer to [`rootDir`](#rootdir-string) value if +you want to use file paths. + +Additionally, you can substitute captured regex groups using numbered +backreferences. + +Example: + +```json +{ + "moduleNameMapper": { + "^image![a-zA-Z0-9$_-]+$": "GlobalImageStub", + "^[./a-zA-Z0-9$_-]+\\.png$": "/RelativeImageStub.js", + "module_name_(.*)": "/substituted_module_$1.js" + } +} +``` + +The order in which the mappings are defined matters. Patterns are checked one by +one until one fits. The most specific rule should be listed first. + +_Note: If you provide module name without boundaries `^$` it may cause hard to +spot errors. E.g. `relay` will replace all modules which contain `relay` as a +substring in its name: `relay`, `react-relay` and `graphql-relay` will all be +pointed to your stub._ + +### `modulePathIgnorePatterns` [array] + +Default: `[]` + +An array of regexp pattern strings that are matched against all module paths +before those paths are to be considered 'visible' to the module loader. If a +given module's path matches any of the patterns, it will not be `require()`-able +in the test environment. + +These pattern strings match against the full path. Use the `` string +token to include the path to your project's root directory to prevent it from +accidentally ignoring all of your files in different environments that may have +different root directories. Example: `["/build/"]`. + +### `modulePaths` [array] + +Default: `[]` + +An alternative API to setting the `NODE_PATH` env variable, `modulePaths` is an +array of absolute paths to additional locations to search when resolving +modules. Use the `` string token to include the path to your project's +root directory. Example: `["/app/"]`. + +### `notify` [boolean] + +Default: `false` + +Activates notifications for test results. + +### `preset` [string] + +Default: `undefined` + +A preset that is used as a base for Jest's configuration. A preset should point +to an npm module that exports a `jest-preset.json` module on its top level. + +### `projects` [array] + +Default: `undefined` + +When the `projects` configuration is provided with an array of paths or glob +patterns, Jest will run tests in all of the specified projects at the same time. +This is great for monorepos or when working on multiple projects at the same +time. + +```json +{ + "projects": ["", "/examples/*"] +} +``` + +This example configuration will run Jest in the root directory as well as in +every folder in the examples directory. You can have an unlimited amount of +projects running in the same Jest instance. + +The projects feature can also be used to run multiple configurations or multiple +[runners](#runner-string). For this purpose you can pass an array of +configuration objects. For example, to run both tests and ESLint (via +[jest-runner-eslint](https://github.com/jest-community/jest-runner-eslint)) in +the same invocation of Jest: + +```json +{ + "projects": [ + { + "displayName": "test" + }, + { + "displayName": "lint", + "runner": "jest-runner-eslint", + "testMatch": ["/**/*.js"] + } + ] +} +``` + +### `clearMocks` [boolean] + +Default: `false` + +Automatically clear mock calls and instances between every test. Equivalent to +calling `jest.clearAllMocks()` between each test. This does not remove any mock +implementation that may have been provided. + +### `reporters` [array] + +Default: `undefined` + +##### available in Jest **20.0.0+** + +Use this configuration option to add custom reporters to Jest. A custom reporter +is a class that implements `onRunStart`, `onTestStart`, `onTestResult`, +`onRunComplete` methods that will be called when any of those events occurs. + +If custom reporters are specified, the default Jest reporters will be +overridden. To keep default reporters, `default` can be passed as a module name. + +This will override default reporters: + +```json +{ + "reporters": ["/my-custom-reporter.js"] +} +``` + +This will use custom reporter in addition to default reporters that Jest +provides: + +```json +{ + "reporters": ["default", "/my-custom-reporter.js"] +} +``` + +Additionally, custom reporters can be configured by passing an `options` object +as a second argument: + +```json +{ + "reporters": [ + "default", + ["/my-custom-reporter.js", {"banana": "yes", "pineapple": "no"}] + ] +} +``` + +Custom reporter modules must define a class that takes a `GlobalConfig` and +reporter options as constructor arguments: + +Example reporter: + +```js +// my-custom-reporter.js +class MyCustomReporter { + constructor(globalConfig, options) { + this._globalConfig = globalConfig; + this._options = options; + } + + onRunComplete(contexts, results) { + console.log('Custom reporter output:'); + console.log('GlobalConfig: ', this._globalConfig); + console.log('Options: ', this._options); + } +} + +module.exports = MyCustomReporter; +``` + +Custom reporters can also force Jest to exit with non-0 code by returning an +Error from `getLastError()` methods + +```js +class MyCustomReporter { + // ... + getLastError() { + if (this._shouldFail) { + return new Error('my-custom-reporter.js reported an error'); + } + } +} +``` + +For the full list of methods and argument types see `Reporter` type in +[types/TestRunner.js](https://github.com/facebook/jest/blob/master/types/TestRunner.js) + +### `resetMocks` [boolean] + +Default: `false` + +Automatically reset mock state between every test. Equivalent to calling +`jest.resetAllMocks()` between each test. This will lead to any mocks having +their fake implementations removed but does not restore their initial +implementation. + +### `resetModules` [boolean] + +Default: `false` + +If enabled, the module registry for every test file will be reset before running +each individual test. This is useful to isolate modules for every test so that +local module state doesn't conflict between tests. This can be done +programmatically using [`jest.resetModules()`](#jest-resetmodules). + +### `resolver` [string] + +Default: `undefined` + +##### available in Jest **20.0.0+** + +This option allows the use of a custom resolver. This resolver must be a node +module that exports a function expecting a string as the first argument for the +path to resolve and an object with the following structure as the second +argument: + +``` +{ + "basedir": string, + "browser": bool, + "extensions": [string], + "moduleDirectory": [string], + "paths": [string], + "rootDir": [string] +} +``` + +The function should either return a path to the module that should be resolved +or throw an error if the module can't be found. + +### `rootDir` [string] + +Default: The root of the directory containing your jest's [config file](#) _or_ +the `package.json` _or_ the [`pwd`](http://en.wikipedia.org/wiki/Pwd) if no +`package.json` is found + +The root directory that Jest should scan for tests and modules within. If you +put your Jest config inside your `package.json` and want the root directory to +be the root of your repo, the value for this config param will default to the +directory of the `package.json`. + +Oftentimes, you'll want to set this to `'src'` or `'lib'`, corresponding to +where in your repository the code is stored. + +_Note that using `''` as a string token in any other path-based config +settings will refer back to this value. So, for example, if you want your +[`setupFiles`](#setupfiles-array) config entry to point at the `env-setup.js` +file at the root of your project, you could set its value to +`["/env-setup.js"]`._ + +### `roots` [array] + +Default: `[""]` + +A list of paths to directories that Jest should use to search for files in. + +There are times where you only want Jest to search in a single sub-directory +(such as cases where you have a `src/` directory in your repo), but prevent it +from accessing the rest of the repo. + +_Note: While `rootDir` is mostly used as a token to be re-used in other +configuration options, `roots` is used by the internals of Jest to locate **test +files and source files**. This applies also when searching for manual mocks for +modules from `node_modules` (`__mocks__` will need to live in one of the +`roots`)._ + +_Note: By default, `roots` has a single entry `` but there are cases +where you may want to have multiple roots within one project, for example +`roots: ["/src/", "/tests/"]`._ + +### `runner` [string] + +##### available in Jest **21.0.0+** + +Default: `"jest-runner"` + +This option allows you to use a custom runner instead of Jest's default test +runner. Examples of runners include: + +* [`jest-runner-eslint`](https://github.com/jest-community/jest-runner-eslint) +* [`jest-runner-mocha`](https://github.com/rogeliog/jest-runner-mocha) +* [`jest-runner-tsc`](https://github.com/azz/jest-runner-tsc) +* [`jest-runner-prettier`](https://github.com/keplersj/jest-runner-prettier) + +To write a test-runner, export a class with which accepts `globalConfig` in the +constructor, and has a `runTests` method with the signature: + +```ts +async runTests( + tests: Array, + watcher: TestWatcher, + onStart: OnTestStart, + onResult: OnTestSuccess, + onFailure: OnTestFailure, + options: TestRunnerOptions, +): Promise +``` + +### `setupFiles` [array] + +Default: `[]` + +The paths to modules that run some code to configure or set up the testing +environment before each test. Since every test runs in its own environment, +these scripts will be executed in the testing environment immediately before +executing the test code itself. + +It's worth noting that this code will execute _before_ +[`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). + +### `setupTestFrameworkScriptFile` [string] + +Default: `undefined` + +The path to a module that runs some code to configure or set up the testing +framework before each test. Since [`setupFiles`](#setupfiles-array) executes +before the test framework is installed in the environment, this script file +presents you the opportunity of running some code immediately after the test +framework has been installed in the environment. + +For example, Jest ships with several plug-ins to `jasmine` that work by +monkey-patching the jasmine API. If you wanted to add even more jasmine plugins +to the mix (or if you wanted some custom, project-wide matchers for example), +you could do so in this module. + +### `snapshotSerializers` [array] + +Default: `[]` + +A list of paths to snapshot serializer modules Jest should use for snapshot +testing. + +Jest has default serializers for built-in JavaScript types, HTML elements (Jest +20.0.0+), ImmutableJS (Jest 20.0.0+) and for React elements. See +[snapshot test tutorial](TutorialReactNative.md#snapshot-test) for more +information. + +Example serializer module: + +```js +// my-serializer-module +module.exports = { + print(val, serialize, indent) { + return 'Pretty foo: ' + serialize(val.foo); + }, + + test(val) { + return val && val.hasOwnProperty('foo'); + }, +}; +``` + +`serialize` is a function that serializes a value using existing plugins. + +To use `my-serializer-module` as a serializer, configuration would be as +follows: + +```json +{ + ... + "jest": { + "snapshotSerializers": ["my-serializer-module"] + } +} +``` + +Finally tests would look as follows: + +```js +test(() => { + const bar = { + foo: { + x: 1, + y: 2, + }, + }; + + expect(bar).toMatchSnapshot(); +}); +``` + +Rendered snapshot: + +``` +Pretty foo: Object { + "x": 1, + "y": 2, +} +``` + +To make a dependency explicit instead of implicit, you can call +[`expect.addSnapshotSerializer`](ExpectAPI.md#expectaddsnapshotserializerserializer) +to add a module for an individual test file instead of adding its path to +`snapshotSerializers` in Jest configuration. + +### `testEnvironment` [string] + +Default: `"jsdom"` + +The test environment that will be used for testing. The default environment in +Jest is a browser-like environment through +[jsdom](https://github.com/tmpvar/jsdom). If you are building a node service, +you can use the `node` option to use a node-like environment instead. + +If some tests require another environment, you can add a `@jest-environment` +docblock. + +##### available in Jest **20.0.0+** + +```js +/** + * @jest-environment jsdom + */ + +test('use jsdom in this test file', () => { + const element = document.createElement('div'); + expect(element).not.toBeNull(); +}); +``` + +You can create your own module that will be used for setting up the test +environment. The module must export a class with `setup`, `teardown` and +`runScript` methods. You can also pass variables from this module to your test +suites by assigning them to `this.global` object – this will make them +available in your test suites as global variables. + +##### available in Jest **22.0.0+** + +_Note: TestEnvironment is sandboxed. Each test suite will trigger setup/teardown +in their own TestEnvironment._ + +Example: + +```js +// my-custom-environment +const NodeEnvironment = require('jest-environment-node'); + +class CustomEnvironment extends NodeEnvironment { + constructor(config) { + super(config); + } + + async setup() { + await super.setup(); + await someSetupTasks(); + this.global.someGlobalObject = createGlobalObject(); + } + + async teardown() { + this.global.someGlobalObject = destroyGlobalObject(); + await someTeardownTasks(); + await super.teardown(); + } + + runScript(script) { + return super.runScript(script); + } +} +``` + +```js +// my-test-suite +let someGlobalObject; + +beforeAll(() => { + someGlobalObject = global.someGlobalObject; +}); +``` + +### `testEnvironmentOptions` [Object] + +##### available in Jest **22.0.0+** + +Default: `{}` + +Test environment options that will be passed to the `testEnvironment`. The +relevant options depend on the environment. For example you can override options +given to [jsdom](https://github.com/tmpvar/jsdom) such as +`{userAgent: "Agent/007"}`. + +### `testMatch` [array] + +##### available in Jest **19.0.0+** + +(default: `[ '**/__tests__/**/*.js?(x)', '**/?(*.)(spec|test).js?(x)' ]`) + +The glob patterns Jest uses to detect test files. By default it looks for `.js` +and `.jsx` files inside of `__tests__` folders, as well as any files with a +suffix of `.test` or `.spec` (e.g. `Component.test.js` or `Component.spec.js`). +It will also find files called `test.js` or `spec.js`. + +See the [micromatch](https://github.com/jonschlinkert/micromatch) package for +details of the patterns you can specify. + +See also [`testRegex` [string]](#testregex-string), but note that you cannot +specify both options. + +### `testPathIgnorePatterns` [array] + +Default: `["/node_modules/"]` + +An array of regexp pattern strings that are matched against all test paths +before executing the test. If the test path matches any of the patterns, it will +be skipped. + +These pattern strings match against the full path. Use the `` string +token to include the path to your project's root directory to prevent it from +accidentally ignoring all of your files in different environments that may have +different root directories. Example: +`["/build/", "/node_modules/"]`. + +### `testRegex` [string] + +Default: `(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$` + +The pattern Jest uses to detect test files. By default it looks for `.js` and +`.jsx` files inside of `__tests__` folders, as well as any files with a suffix +of `.test` or `.spec` (e.g. `Component.test.js` or `Component.spec.js`). It will +also find files called `test.js` or `spec.js`. See also +[`testMatch` [array]](#testmatch-array-string), but note that you cannot +specify both options. + +The following is a visualization of the default regex: + +``` +├── __tests__ +│ └── component.spec.js # test +│ └── anything # test +├── package.json # not test +├── foo.test.js # test +├── bar.spec.jsx # test +└── component.js # not test +``` + +### `testResultsProcessor` [string] + +Default: `undefined` + +This option allows the use of a custom results processor. This processor must be +a node module that exports a function expecting an object with the following +structure as the first argument and return it: + +``` +{ + "success": bool, + "startTime": epoch, + "numTotalTestSuites": number, + "numPassedTestSuites": number, + "numFailedTestSuites": number, + "numRuntimeErrorTestSuites": number, + "numTotalTests": number, + "numPassedTests": number, + "numFailedTests": number, + "numPendingTests": number, + "testResults": [{ + "numFailingTests": number, + "numPassingTests": number, + "numPendingTests": number, + "testResults": [{ + "title": string (message in it block), + "status": "failed" | "pending" | "passed", + "ancestorTitles": [string (message in describe blocks)], + "failureMessages": [string], + "numPassingAsserts": number, + "location": { + "column": number, + "line": number + } + }, + ... + ], + "perfStats": { + "start": epoch, + "end": epoch + }, + "testFilePath": absolute path to test file, + "coverage": {} + }, + ... + ] +} +``` + +### `testRunner` [string] + +Default: `jasmine2` + +This option allows use of a custom test runner. The default is jasmine2. A +custom test runner can be provided by specifying a path to a test runner +implementation. + +The test runner module must export a function with the following signature: + +``` +function testRunner( + config: Config, + environment: Environment, + runtime: Runtime, + testPath: string, +): Promise +``` + +An example of such function can be found in our default +[jasmine2 test runner package](https://github.com/facebook/jest/blob/master/packages/jest-jasmine2/src/index.js). + +### `testURL` [string] + +Default: `about:blank` + +This option sets the URL for the jsdom environment. It is reflected in +properties such as `location.href`. + +### `timers` [string] + +Default: `real` + +Setting this value to `fake` allows the use of fake timers for functions such as +`setTimeout`. Fake timers are useful when a piece of code sets a long timeout +that we don't want to wait for in a test. + +### `transform` [object] + +Default: `undefined` + +A map from regular expressions to paths to transformers. A transformer is a +module that provides a synchronous function for transforming source files. For +example, if you wanted to be able to use a new language feature in your modules +or tests that isn't yet supported by node, you might plug in one of many +compilers that compile a future version of JavaScript to a current one. Example: +see the +[examples/typescript](https://github.com/facebook/jest/blob/master/examples/typescript/package.json#L16) +example or the [webpack tutorial](Webpack.md). + +Examples of such compilers include [Babel](https://babeljs.io/), +[TypeScript](http://www.typescriptlang.org/) and +[async-to-gen](http://github.com/leebyron/async-to-gen#jest). + +_Note: a transformer is only ran once per file unless the file has changed. +During development of a transformer it can be useful to run Jest with +`--no-cache` to frequently +[delete Jest's cache](Troubleshooting.md#caching-issues)._ + +_Note: if you are using the `babel-jest` transformer and want to use an +additional code preprocessor, keep in mind that when "transform" is overwritten +in any way the `babel-jest` is not loaded automatically anymore. If you want to +use it to compile JavaScript code it has to be explicitly defined. See +[babel-jest plugin](https://github.com/facebook/jest/tree/master/packages/babel-jest#setup)_ + +### `transformIgnorePatterns` [array] + +Default: `["/node_modules/"]` + +An array of regexp pattern strings that are matched against all source file +paths before transformation. If the test path matches any of the patterns, it +will not be transformed. + +These pattern strings match against the full path. Use the `` string +token to include the path to your project's root directory to prevent it from +accidentally ignoring all of your files in different environments that may have +different root directories. + +Example: `["/bower_components/", "/node_modules/"]`. + +Sometimes it happens (especially in React Native or TypeScript projects) that +3rd party modules are published as untranspiled. Since all files inside +`node_modules` are not transformed by default, Jest will not understand the code +in these modules, resulting in syntax errors. To overcome this, you may use +`transformIgnorePatterns` to whitelist such modules. You'll find a good example +of this use case in +[React Native Guide](http://facebook.github.io/jest/docs/en/tutorial-react-native.html#transformignorepatterns-customization). + +### `unmockedModulePathPatterns` [array] + +Default: `[]` + +An array of regexp pattern strings that are matched against all modules before +the module loader will automatically return a mock for them. If a module's path +matches any of the patterns in this list, it will not be automatically mocked by +the module loader. + +This is useful for some commonly used 'utility' modules that are almost always +used as implementation details almost all the time (like underscore/lo-dash, +etc). It's generally a best practice to keep this list as small as possible and +always use explicit `jest.mock()`/`jest.unmock()` calls in individual tests. +Explicit per-test setup is far easier for other readers of the test to reason +about the environment the test will run in. + +It is possible to override this setting in individual tests by explicitly +calling `jest.mock()` at the top of the test file. + +### `verbose` [boolean] + +Default: `false` + +Indicates whether each individual test should be reported during the run. All +errors will also still be shown on the bottom after execution. + +### `watchPathIgnorePatterns` [array] + +Default: `[]` + +##### available in Jest **21.0.0+** + +An array of RegExp patterns that are matched against all source file paths +before re-running tests in watch mode. If the file path matches any of the +patterns, when it is updated, it will not trigger a re-run of tests. + +These patterns match against the full path. Use the `` string token to +include the path to your project's root directory to prevent it from +accidentally ignoring all of your files in different environments that may have +different root directories. Example: `["/node_modules/"]`. diff --git a/website/versioned_docs/version-22.0/ExpectAPI.md b/website/versioned_docs/version-22.0/ExpectAPI.md new file mode 100644 index 000000000000..42b93e7e6bf0 --- /dev/null +++ b/website/versioned_docs/version-22.0/ExpectAPI.md @@ -0,0 +1,1060 @@ +--- +id: version-22.0-expect +title: Expect +original_id: expect +--- + +When you're writing tests, you often need to check that values meet certain +conditions. `expect` gives you access to a number of "matchers" that let you +validate different things. + +## Methods + + + +--- + +## Reference + +### `expect(value)` + +The `expect` function is used every time you want to test a value. You will +rarely call `expect` by itself. Instead, you will use `expect` along with a +"matcher" function to assert something about a value. + +It's easier to understand this with an example. Let's say you have a method +`bestLaCroixFlavor()` which is supposed to return the string `'grapefruit'`. +Here's how you would test that: + +```js +test('the best flavor is grapefruit', () => { + expect(bestLaCroixFlavor()).toBe('grapefruit'); +}); +``` + +In this case, `toBe` is the matcher function. There are a lot of different +matcher functions, documented below, to help you test different things. + +The argument to `expect` should be the value that your code produces, and any +argument to the matcher should be the correct value. If you mix them up, your +tests will still work, but the error messages on failing tests will look +strange. + +### `expect.extend(matchers)` + +You can use `expect.extend` to add your own matchers to Jest. For example, let's +say that you're testing a number theory library and you're frequently asserting +that numbers are divisible by other numbers. You could abstract that into a +`toBeDivisibleBy` matcher: + +```js +expect.extend({ + toBeDivisibleBy(received, argument) { + const pass = received % argument == 0; + if (pass) { + return { + message: () => + `expected ${received} not to be divisible by ${argument}`, + pass: true, + }; + } else { + return { + message: () => `expected ${received} to be divisible by ${argument}`, + pass: false, + }; + } + }, +}); + +test('even and odd numbers', () => { + expect(100).toBeDivisibleBy(2); + expect(101).not.toBeDivisibleBy(2); +}); +``` + +Matchers should return an object with two keys. `pass` indicates whether there +was a match or not, and `message` provides a function with no arguments that +returns an error message in case of failure. Thus, when `pass` is false, +`message` should return the error message for when `expect(x).yourMatcher()` +fails. And when `pass` is true, `message` should return the error message for +when `expect(x).not.yourMatcher()` fails. + +These helper functions can be found on `this` inside a custom matcher: + +#### `this.isNot` + +A boolean to let you know this matcher was called with the negated `.not` +modifier allowing you to flip your assertion. + +#### `this.equals(a, b)` + +This is a deep-equality function that will return `true` if two objects have the +same values (recursively). + +#### `this.utils` + +There are a number of helpful tools exposed on `this.utils` primarily consisting +of the exports from +[`jest-matcher-utils`](https://github.com/facebook/jest/tree/master/packages/jest-matcher-utils). + +The most useful ones are `matcherHint`, `printExpected` and `printReceived` to +format the error messages nicely. For example, take a look at the implementation +for the `toBe` matcher: + +```js +const diff = require('jest-diff'); +expect.extend({ + toBe(received, expected) { + const pass = Object.is(received, expected); + + const message = pass + ? () => + this.utils.matcherHint('.not.toBe') + + '\n\n' + + `Expected value to not be (using Object.is):\n` + + ` ${this.utils.printExpected(expected)}\n` + + `Received:\n` + + ` ${this.utils.printReceived(received)}` + : () => { + const diffString = diff(expected, received, { + expand: this.expand, + }); + return ( + this.utils.matcherHint('.toBe') + + '\n\n' + + `Expected value to be (using Object.is):\n` + + ` ${this.utils.printExpected(expected)}\n` + + `Received:\n` + + ` ${this.utils.printReceived(received)}` + + (diffString ? `\n\nDifference:\n\n${diffString}` : '') + ); + }; + + return {actual: received, message, pass}; + }, +}); +``` + +This will print something like this: + +``` + expect(received).toBe(expected) + + Expected value to be (using Object.is): + "banana" + Received: + "apple" +``` + +When an assertion fails, the error message should give as much signal as +necessary to the user so they can resolve their issue quickly. You should craft +a precise failure message to make sure users of your custom assertions have a +good developer experience. + +### `expect.anything()` + +`expect.anything()` matches anything but `null` or `undefined`. You can use it +inside `toEqual` or `toBeCalledWith` instead of a literal value. For example, if +you want to check that a mock function is called with a non-null argument: + +```js +test('map calls its argument with a non-null argument', () => { + const mock = jest.fn(); + [1].map(x => mock(x)); + expect(mock).toBeCalledWith(expect.anything()); +}); +``` + +### `expect.any(constructor)` + +`expect.any(constructor)` matches anything that was created with the given +constructor. You can use it inside `toEqual` or `toBeCalledWith` instead of a +literal value. For example, if you want to check that a mock function is called +with a number: + +```js +function randocall(fn) { + return fn(Math.floor(Math.random() * 6 + 1)); +} + +test('randocall calls its callback with a number', () => { + const mock = jest.fn(); + randocall(mock); + expect(mock).toBeCalledWith(expect.any(Number)); +}); +``` + +### `expect.arrayContaining(array)` + +`expect.arrayContaining(array)` matches a received array which contains all of +the elements in the expected array. That is, the expected array is a **subset** +of the received array. Therefore, it matches a received array which contains +elements that are **not** in the expected array. + +You can use it instead of a literal value: + +* in `toEqual` or `toBeCalledWith` +* to match a property in `objectContaining` or `toMatchObject` + +```js +describe('arrayContaining', () => { + const expected = ['Alice', 'Bob']; + it('matches even if received contains additional elements', () => { + expect(['Alice', 'Bob', 'Eve']).toEqual(expect.arrayContaining(expected)); + }); + it('does not match if received does not contain expected elements', () => { + expect(['Bob', 'Eve']).not.toEqual(expect.arrayContaining(expected)); + }); +}); +``` + +```js +describe('Beware of a misunderstanding! A sequence of dice rolls', () => { + const expected = [1, 2, 3, 4, 5, 6]; + it('matches even with an unexpected number 7', () => { + expect([4, 1, 6, 7, 3, 5, 2, 5, 4, 6]).toEqual( + expect.arrayContaining(expected), + ); + }); + it('does not match without an expected number 2', () => { + expect([4, 1, 6, 7, 3, 5, 7, 5, 4, 6]).not.toEqual( + expect.arrayContaining(expected), + ); + }); +}); +``` + +### `expect.assertions(number)` + +`expect.assertions(number)` verifies that a certain number of assertions are +called during a test. This is often useful when testing asynchronous code, in +order to make sure that assertions in a callback actually got called. + +For example, let's say that we have a function `doAsync` that receives two +callbacks `callback1` and `callback2`, it will asynchronously call both of them +in an unknown order. We can test this with: + +```js +test('doAsync calls both callbacks', () => { + expect.assertions(2); + function callback1(data) { + expect(data).toBeTruthy(); + } + function callback2(data) { + expect(data).toBeTruthy(); + } + + doAsync(callback1, callback2); +}); +``` + +The `expect.assertions(2)` call ensures that both callbacks actually get called. + +### `expect.hasAssertions()` + +`expect.hasAssertions()` verifies that at least one assertion is called during a +test. This is often useful when testing asynchronous code, in order to make sure +that assertions in a callback actually got called. + +For example, let's say that we have a few functions that all deal with state. +`prepareState` calls a callback with a state object, `validateState` runs on +that state object, and `waitOnState` returns a promise that waits until all +`prepareState` callbacks complete. We can test this with: + +```js +test('prepareState prepares a valid state', () => { + expect.hasAssertions(); + prepareState(state => { + expect(validateState(state)).toBeTruthy(); + }); + return waitOnState(); +}); +``` + +The `expect.hasAssertions()` call ensures that the `prepareState` callback +actually gets called. + +### `expect.objectContaining(object)` + +`expect.objectContaining(object)` matches any received object that recursively +matches the expected properties. That is, the expected object is a **subset** of +the received object. Therefore, it matches a received object which contains +properties that are **not** in the expected object. + +Instead of literal property values in the expected object, you can use matchers, +`expect.anything()`, and so on. + +For example, let's say that we expect an `onPress` function to be called with an +`Event` object, and all we need to verify is that the event has `event.x` and +`event.y` properties. We can do that with: + +```js +test('onPress gets called with the right thing', () => { + const onPress = jest.fn(); + simulatePresses(onPress); + expect(onPress).toBeCalledWith( + expect.objectContaining({ + x: expect.any(Number), + y: expect.any(Number), + }), + ); +}); +``` + +### `expect.stringContaining(string)` + +##### available in Jest **19.0.0+** + +`expect.stringContaining(string)` matches any received string that contains the +exact expected string. + +### `expect.stringMatching(regexp)` + +`expect.stringMatching(regexp)` matches any received string that matches the +expected regexp. + +You can use it instead of a literal value: + +* in `toEqual` or `toBeCalledWith` +* to match an element in `arrayContaining` +* to match a property in `objectContaining` or `toMatchObject` + +This example also shows how you can nest multiple asymmetric matchers, with +`expect.stringMatching` inside the `expect.arrayContaining`. + +```js +describe('stringMatching in arrayContaining', () => { + const expected = [ + expect.stringMatching(/^Alic/), + expect.stringMatching(/^[BR]ob/), + ]; + it('matches even if received contains additional elements', () => { + expect(['Alicia', 'Roberto', 'Evelina']).toEqual( + expect.arrayContaining(expected), + ); + }); + it('does not match if received does not contain expected elements', () => { + expect(['Roberto', 'Evelina']).not.toEqual( + expect.arrayContaining(expected), + ); + }); +}); +``` + +### `expect.addSnapshotSerializer(serializer)` + +You can call `expect.addSnapshotSerializer` to add a module that formats +application-specific data structures. + +For an individual test file, an added module precedes any modules from +`snapshotSerializers` configuration, which precede the default snapshot +serializers for built-in JavaScript types and for React elements. The last +module added is the first module tested. + +```js +import serializer from 'my-serializer-module'; +expect.addSnapshotSerializer(serializer); + +// affects expect(value).toMatchSnapshot() assertions in the test file +``` + +If you add a snapshot serializer in individual test files instead of to adding +it to `snapshotSerializers` configuration: + +* You make the dependency explicit instead of implicit. +* You avoid limits to configuration that might cause you to eject from + [create-react-app](https://github.com/facebookincubator/create-react-app). + +See [configuring Jest](Configuration.md#snapshotserializers-array-string) for +more information. + +### `.not` + +If you know how to test something, `.not` lets you test its opposite. For +example, this code tests that the best La Croix flavor is not coconut: + +```js +test('the best flavor is not coconut', () => { + expect(bestLaCroixFlavor()).not.toBe('coconut'); +}); +``` + +### `.resolves` + +##### available in Jest **20.0.0+** + +Use `resolves` to unwrap the value of a fulfilled promise so any other matcher +can be chained. If the promise is rejected the assertion fails. + +For example, this code tests that the promise resolves and that the resulting +value is `'lemon'`: + +```js +test('resolves to lemon', () => { + // make sure to add a return statement + return expect(Promise.resolve('lemon')).resolves.toBe('lemon'); +}); +``` + +Note that, since you are still testing promises, the test is still asynchronous. +Hence, you will need to [tell Jest to wait](TestingAsyncCode.md#promises) by +returning the unwrapped assertion. + +Alternatively, you can use `async/await` in combination with `.resolves`: + +```js +test('resolves to lemon', async () => { + await expect(Promise.resolve('lemon')).resolves.toBe('lemon'); + await expect(Promise.resolve('lemon')).resolves.not.toBe('octopus'); +}); +``` + +### `.rejects` + +##### available in Jest **20.0.0+** + +Use `.rejects` to unwrap the reason of a rejected promise so any other matcher +can be chained. If the promise is fulfilled the assertion fails. + +For example, this code tests that the promise rejects with reason `'octopus'`: + +```js +test('rejects to octopus', () => { + // make sure to add a return statement + return expect(Promise.reject(new Error('octopus'))).rejects.toThrow( + 'octopus', + ); +}); +``` + +Note that, since you are still testing promises, the test is still asynchronous. +Hence, you will need to [tell Jest to wait](TestingAsyncCode.md#promises) by +returning the unwrapped assertion. + +Alternatively, you can use `async/await` in combination with `.rejects`. + +```js +test('rejects to octopus', async () => { + await expect(Promise.reject(new Error('octopus'))).rejects.toThrow('octopus'); +}); +``` + +### `.toBe(value)` + +`toBe` just checks that a value is what you expect. It uses `Object.is` to check +exact equality. + +For example, this code will validate some properties of the `can` object: + +```js +const can = { + name: 'pamplemousse', + ounces: 12, +}; + +describe('the can', () => { + test('has 12 ounces', () => { + expect(can.ounces).toBe(12); + }); + + test('has a sophisticated name', () => { + expect(can.name).toBe('pamplemousse'); + }); +}); +``` + +Don't use `toBe` with floating-point numbers. For example, due to rounding, in +JavaScript `0.2 + 0.1` is not strictly equal to `0.3`. If you have floating +point numbers, try `.toBeCloseTo` instead. + +### `.toHaveBeenCalled()` + +Also under the alias: `.toBeCalled()` + +Use `.toHaveBeenCalled` to ensure that a mock function got called. + +For example, let's say you have a `drinkAll(drink, flavor)` function that takes +a `drink` function and applies it to all available beverages. You might want to +check that `drink` gets called for `'lemon'`, but not for `'octopus'`, because +`'octopus'` flavor is really weird and why would anything be octopus-flavored? +You can do that with this test suite: + +```js +describe('drinkAll', () => { + test('drinks something lemon-flavored', () => { + const drink = jest.fn(); + drinkAll(drink, 'lemon'); + expect(drink).toHaveBeenCalled(); + }); + + test('does not drink something octopus-flavored', () => { + const drink = jest.fn(); + drinkAll(drink, 'octopus'); + expect(drink).not.toHaveBeenCalled(); + }); +}); +``` + +### `.toHaveBeenCalledTimes(number)` + +Use `.toHaveBeenCalledTimes` to ensure that a mock function got called exact +number of times. + +For example, let's say you have a `drinkEach(drink, Array)` function +that takes a `drink` function and applies it to array of passed beverages. You +might want to check that drink function was called exact number of times. You +can do that with this test suite: + +```js +test('drinkEach drinks each drink', () => { + const drink = jest.fn(); + drinkEach(drink, ['lemon', 'octopus']); + expect(drink).toHaveBeenCalledTimes(2); +}); +``` + +### `.toHaveBeenCalledWith(arg1, arg2, ...)` + +Also under the alias: `.toBeCalledWith()` + +Use `.toHaveBeenCalledWith` to ensure that a mock function was called with +specific arguments. + +For example, let's say that you can register a beverage with a `register` +function, and `applyToAll(f)` should apply the function `f` to all registered +beverages. To make sure this works, you could write: + +```js +test('registration applies correctly to orange La Croix', () => { + const beverage = new LaCroix('orange'); + register(beverage); + const f = jest.fn(); + applyToAll(f); + expect(f).toHaveBeenCalledWith(beverage); +}); +``` + +### `.toHaveBeenLastCalledWith(arg1, arg2, ...)` + +Also under the alias: `.lastCalledWith(arg1, arg2, ...)` + +If you have a mock function, you can use `.toHaveBeenLastCalledWith` to test +what arguments it was last called with. For example, let's say you have a +`applyToAllFlavors(f)` function that applies `f` to a bunch of flavors, and you +want to ensure that when you call it, the last flavor it operates on is +`'mango'`. You can write: + +```js +test('applying to all flavors does mango last', () => { + const drink = jest.fn(); + applyToAllFlavors(drink); + expect(drink).toHaveBeenLastCalledWith('mango'); +}); +``` + +### `.toBeCloseTo(number, numDigits)` + +Using exact equality with floating point numbers is a bad idea. Rounding means +that intuitive things fail. For example, this test fails: + +```js +test('adding works sanely with simple decimals', () => { + expect(0.2 + 0.1).toBe(0.3); // Fails! +}); +``` + +It fails because in JavaScript, `0.2 + 0.1` is actually `0.30000000000000004`. +Sorry. + +Instead, use `.toBeCloseTo`. Use `numDigits` to control how many digits after +the decimal point to check. For example, if you want to be sure that `0.2 + 0.1` +is equal to `0.3` with a precision of 5 decimal digits, you can use this test: + +```js +test('adding works sanely with simple decimals', () => { + expect(0.2 + 0.1).toBeCloseTo(0.3, 5); +}); +``` + +The default for `numDigits` is 2, which has proved to be a good default in most +cases. + +### `.toBeDefined()` + +Use `.toBeDefined` to check that a variable is not undefined. For example, if +you just want to check that a function `fetchNewFlavorIdea()` returns +_something_, you can write: + +```js +test('there is a new flavor idea', () => { + expect(fetchNewFlavorIdea()).toBeDefined(); +}); +``` + +You could write `expect(fetchNewFlavorIdea()).not.toBe(undefined)`, but it's +better practice to avoid referring to `undefined` directly in your code. + +### `.toBeFalsy()` + +Use `.toBeFalsy` when you don't care what a value is, you just want to ensure a +value is false in a boolean context. For example, let's say you have some +application code that looks like: + +```js +drinkSomeLaCroix(); +if (!getErrors()) { + drinkMoreLaCroix(); +} +``` + +You may not care what `getErrors` returns, specifically - it might return +`false`, `null`, or `0`, and your code would still work. So if you want to test +there are no errors after drinking some La Croix, you could write: + +```js +test('drinking La Croix does not lead to errors', () => { + drinkSomeLaCroix(); + expect(getErrors()).toBeFalsy(); +}); +``` + +In JavaScript, there are six falsy values: `false`, `0`, `''`, `null`, +`undefined`, and `NaN`. Everything else is truthy. + +### `.toBeGreaterThan(number)` + +To compare floating point numbers, you can use `toBeGreaterThan`. For example, +if you want to test that `ouncesPerCan()` returns a value of more than 10 +ounces, write: + +```js +test('ounces per can is more than 10', () => { + expect(ouncesPerCan()).toBeGreaterThan(10); +}); +``` + +### `.toBeGreaterThanOrEqual(number)` + +To compare floating point numbers, you can use `toBeGreaterThanOrEqual`. For +example, if you want to test that `ouncesPerCan()` returns a value of at least +12 ounces, write: + +```js +test('ounces per can is at least 12', () => { + expect(ouncesPerCan()).toBeGreaterThanOrEqual(12); +}); +``` + +### `.toBeLessThan(number)` + +To compare floating point numbers, you can use `toBeLessThan`. For example, if +you want to test that `ouncesPerCan()` returns a value of less than 20 ounces, +write: + +```js +test('ounces per can is less than 20', () => { + expect(ouncesPerCan()).toBeLessThan(20); +}); +``` + +### `.toBeLessThanOrEqual(number)` + +To compare floating point numbers, you can use `toBeLessThanOrEqual`. For +example, if you want to test that `ouncesPerCan()` returns a value of at most 12 +ounces, write: + +```js +test('ounces per can is at most 12', () => { + expect(ouncesPerCan()).toBeLessThanOrEqual(12); +}); +``` + +### `.toBeInstanceOf(Class)` + +Use `.toBeInstanceOf(Class)` to check that an object is an instance of a class. +This matcher uses `instanceof` underneath. + +```js +class A {} + +expect(new A()).toBeInstanceOf(A); +expect(() => {}).toBeInstanceOf(Function); +expect(new A()).toBeInstanceOf(Function); // throws +``` + +### `.toBeNull()` + +`.toBeNull()` is the same as `.toBe(null)` but the error messages are a bit +nicer. So use `.toBeNull()` when you want to check that something is null. + +```js +function bloop() { + return null; +} + +test('bloop returns null', () => { + expect(bloop()).toBeNull(); +}); +``` + +### `.toBeTruthy()` + +Use `.toBeTruthy` when you don't care what a value is, you just want to ensure a +value is true in a boolean context. For example, let's say you have some +application code that looks like: + +```js +drinkSomeLaCroix(); +if (thirstInfo()) { + drinkMoreLaCroix(); +} +``` + +You may not care what `thirstInfo` returns, specifically - it might return +`true` or a complex object, and your code would still work. So if you just want +to test that `thirstInfo` will be truthy after drinking some La Croix, you could +write: + +```js +test('drinking La Croix leads to having thirst info', () => { + drinkSomeLaCroix(); + expect(thirstInfo()).toBeTruthy(); +}); +``` + +In JavaScript, there are six falsy values: `false`, `0`, `''`, `null`, +`undefined`, and `NaN`. Everything else is truthy. + +### `.toBeUndefined()` + +Use `.toBeUndefined` to check that a variable is undefined. For example, if you +want to check that a function `bestDrinkForFlavor(flavor)` returns `undefined` +for the `'octopus'` flavor, because there is no good octopus-flavored drink: + +```js +test('the best drink for octopus flavor is undefined', () => { + expect(bestDrinkForFlavor('octopus')).toBeUndefined(); +}); +``` + +You could write `expect(bestDrinkForFlavor('octopus')).toBe(undefined)`, but +it's better practice to avoid referring to `undefined` directly in your code. + +### `.toContain(item)` + +Use `.toContain` when you want to check that an item is in an array. For testing +the items in the array, this uses `===`, a strict equality check. `.toContain` +can also check whether a string is a substring of another string. + +For example, if `getAllFlavors()` returns an array of flavors and you want to be +sure that `lime` is in there, you can write: + +```js +test('the flavor list contains lime', () => { + expect(getAllFlavors()).toContain('lime'); +}); +``` + +### `.toContainEqual(item)` + +Use `.toContainEqual` when you want to check that an item with a specific +structure and values is contained in an array. For testing the items in the +array, this matcher recursively checks the equality of all fields, rather than +checking for object identity. + +```js +describe('my beverage', () => { + test('is delicious and not sour', () => { + const myBeverage = {delicious: true, sour: false}; + expect(myBeverages()).toContainEqual(myBeverage); + }); +}); +``` + +### `.toEqual(value)` + +Use `.toEqual` when you want to check that two objects have the same value. This +matcher recursively checks the equality of all fields, rather than checking for +object identity—this is also known as "deep equal". For example, `toEqual` and +`toBe` behave differently in this test suite, so all the tests pass: + +```js +const can1 = { + flavor: 'grapefruit', + ounces: 12, +}; +const can2 = { + flavor: 'grapefruit', + ounces: 12, +}; + +describe('the La Croix cans on my desk', () => { + test('have all the same properties', () => { + expect(can1).toEqual(can2); + }); + test('are not the exact same can', () => { + expect(can1).not.toBe(can2); + }); +}); +``` + +> Note: `.toEqual` won't perform a _deep equality_ check for two errors. Only +> the `message` property of an Error is considered for equality. It is +> recommended to use the `.toThrow` matcher for testing against errors. + +### `.toHaveLength(number)` + +Use `.toHaveLength` to check that an object has a `.length` property and it is +set to a certain numeric value. + +This is especially useful for checking arrays or strings size. + +```js +expect([1, 2, 3]).toHaveLength(3); +expect('abc').toHaveLength(3); +expect('').not.toHaveLength(5); +``` + +### `.toMatch(regexpOrString)` + +Use `.toMatch` to check that a string matches a regular expression. + +For example, you might not know what exactly `essayOnTheBestFlavor()` returns, +but you know it's a really long string, and the substring `grapefruit` should be +in there somewhere. You can test this with: + +```js +describe('an essay on the best flavor', () => { + test('mentions grapefruit', () => { + expect(essayOnTheBestFlavor()).toMatch(/grapefruit/); + expect(essayOnTheBestFlavor()).toMatch(new RegExp('grapefruit')); + }); +}); +``` + +This matcher also accepts a string, which it will try to match: + +```js +describe('grapefruits are healthy', () => { + test('grapefruits are a fruit', () => { + expect('grapefruits').toMatch('fruit'); + }); +}); +``` + +### `.toMatchObject(object)` + +Use `.toMatchObject` to check that a JavaScript object matches a subset of the +properties of an object. It will match received objects with properties that are +**not** in the expected object. + +You can also pass an array of objects, in which case the method will return true +only if each object in the received array matches (in the `toMatchObject` sense +described above) the corresponding object in the expected array. This is useful +if you want to check that two arrays match in their number of elements, as +opposed to `arrayContaining`, which allows for extra elements in the received +array. + +You can match properties against values or against matchers. + +```js +const houseForSale = { + bath: true, + bedrooms: 4, + kitchen: { + amenities: ['oven', 'stove', 'washer'], + area: 20, + wallColor: 'white', + }, +}; +const desiredHouse = { + bath: true, + kitchen: { + amenities: ['oven', 'stove', 'washer'], + wallColor: expect.stringMatching(/white|yellow/), + }, +}; + +test('the house has my desired features', () => { + expect(houseForSale).toMatchObject(desiredHouse); +}); +``` + +```js +describe('toMatchObject applied to arrays arrays', () => { + test('the number of elements must match exactly', () => { + expect([{foo: 'bar'}, {baz: 1}]).toMatchObject([{foo: 'bar'}, {baz: 1}]); + }); + + // .arrayContaining "matches a received array which contains elements that + // are *not* in the expected array" + test('.toMatchObject does not allow extra elements', () => { + expect([{foo: 'bar'}, {baz: 1}]).toMatchObject([{foo: 'bar'}]); + }); + + test('.toMatchObject is called for each elements, so extra object properties are okay', () => { + expect([{foo: 'bar'}, {baz: 1, extra: 'quux'}]).toMatchObject([ + {foo: 'bar'}, + {baz: 1}, + ]); + }); +}); +``` + +### `.toHaveProperty(keyPath, value)` + +Use `.toHaveProperty` to check if property at provided reference `keyPath` +exists for an object. For checking deeply nested properties in an object you may +use +[dot notation](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors) +or an array containing the keyPath for deep references. + +Optionally, you can provide a `value` to check if it's equal to the value +present at `keyPath` on the target object. This matcher uses 'deep equality' +(like `toEqual()`) and recursively checks the equality of all fields. + +The following example contains a `houseForSale` object with nested properties. +We are using `toHaveProperty` to check for the existence and values of various +properties in the object. + +```js +// Object containing house features to be tested +const houseForSale = { + bath: true, + bedrooms: 4, + kitchen: { + amenities: ['oven', 'stove', 'washer'], + area: 20, + wallColor: 'white', + }, +}; + +test('this house has my desired features', () => { + // Simple Referencing + expect(houseForSale).toHaveProperty('bath'); + expect(houseForSale).toHaveProperty('bedrooms', 4); + + expect(houseForSale).not.toHaveProperty('pool'); + + // Deep referencing using dot notation + expect(houseForSale).toHaveProperty('kitchen.area', 20); + expect(houseForSale).toHaveProperty('kitchen.amenities', [ + 'oven', + 'stove', + 'washer', + ]); + + expect(houseForSale).not.toHaveProperty('kitchen.open'); + + // Deep referencing using an array containing the keyPath + expect(houseForSale).toHaveProperty(['kitchen', 'area'], 20); + expect(houseForSale).toHaveProperty( + ['kitchen', 'amenities'], + ['oven', 'stove', 'washer'], + ); + expect(houseForSale).toHaveProperty(['kitchen', 'amenities', 0], 'oven'); + + expect(houseForSale).not.toHaveProperty(['kitchen', 'open']); +}); +``` + +### `.toMatchSnapshot(optionalString)` + +This ensures that a value matches the most recent snapshot. Check out +[the Snapshot Testing guide](SnapshotTesting.md) for more information. + +You can also specify an optional snapshot name. Otherwise, the name is inferred +from the test. + +_Note: While snapshot testing is most commonly used with React components, any +serializable value can be used as a snapshot._ + +### `.toThrow(error)` + +Also under the alias: `.toThrowError(error)` + +Use `.toThrow` to test that a function throws when it is called. For example, if +we want to test that `drinkFlavor('octopus')` throws, because octopus flavor is +too disgusting to drink, we could write: + +```js +test('throws on octopus', () => { + expect(() => { + drinkFlavor('octopus'); + }).toThrow(); +}); +``` + +If you want to test that a specific error gets thrown, you can provide an +argument to `toThrow`. The argument can be a string for the error message, a +class for the error, or a regex that should match the error. For example, let's +say that `drinkFlavor` is coded like this: + +```js +function drinkFlavor(flavor) { + if (flavor == 'octopus') { + throw new DisgustingFlavorError('yuck, octopus flavor'); + } + // Do some other stuff +} +``` + +We could test this error gets thrown in several ways: + +```js +test('throws on octopus', () => { + function drinkOctopus() { + drinkFlavor('octopus'); + } + + // Test the exact error message + expect(drinkOctopus).toThrowError('yuck, octopus flavor'); + + // Test that the error message says "yuck" somewhere + expect(drinkOctopus).toThrowError(/yuck/); + + // Test that we get a DisgustingFlavorError + expect(drinkOctopus).toThrowError(DisgustingFlavorError); +}); +``` + +> Note: You must wrap the code in a function, otherwise the error will not be +> caught and the assertion will fail. + +### `.toThrowErrorMatchingSnapshot()` + +Use `.toThrowErrorMatchingSnapshot` to test that a function throws an error +matching the most recent snapshot when it is called. For example, let's say you +have a `drinkFlavor` function that throws whenever the flavor is `'octopus'`, +and is coded like this: + +```js +function drinkFlavor(flavor) { + if (flavor == 'octopus') { + throw new DisgustingFlavorError('yuck, octopus flavor'); + } + // Do some other stuff +} +``` + +The test for this function will look this way: + +```js +test('throws on octopus', () => { + function drinkOctopus() { + drinkFlavor('octopus'); + } + + expect(drinkOctopus).toThrowErrorMatchingSnapshot(); +}); +``` + +And it will generate the following snapshot: + +``` +exports[`drinking flavors throws on octopus 1`] = `"yuck, octopus flavor"`; +``` + +Check out +[React Tree Snapshot Testing](http://facebook.github.io/jest/blog/2016/07/27/jest-14.html) +for more information on snapshot testing. diff --git a/website/versioned_docs/version-22.0/GettingStarted.md b/website/versioned_docs/version-22.0/GettingStarted.md new file mode 100644 index 000000000000..231f29a52fa0 --- /dev/null +++ b/website/versioned_docs/version-22.0/GettingStarted.md @@ -0,0 +1,156 @@ +--- +id: version-22.0-getting-started +title: Getting Started +original_id: getting-started +--- + +Install Jest using [`npm`](https://www.npmjs.com/): + +``` +npm install --save-dev jest +``` + +Or via [`yarn`](https://yarnpkg.com/en/package/jest): + +``` +yarn add --dev jest +``` + +Let's get started by writing a test for a hypothetical function that adds two +numbers. First, create a `sum.js` file: + +```javascript +function sum(a, b) { + return a + b; +} +module.exports = sum; +``` + +Then, create a file named `sum.test.js`. This will contain our actual test: + +```javascript +const sum = require('./sum'); + +test('adds 1 + 2 to equal 3', () => { + expect(sum(1, 2)).toBe(3); +}); +``` + +Add the following section to your `package.json`: + +```json +{ + "scripts": { + "test": "jest" + } +} +``` + +Finally, run `npm test` and Jest will print this message: + +``` +PASS ./sum.test.js +✓ adds 1 + 2 to equal 3 (5ms) +``` + +**You just successfully wrote your first test using Jest!** + +This test used `expect` and `toBe` to test that two values were exactly +identical. To learn about the other things that Jest can test, see +[Using Matchers](UsingMatchers.md). + +## Running from command line + +You can run Jest directly from the CLI (if it's globally available in your +`PATH`, e.g. by `npm install -g jest`) with variety of useful options. + +Here's how to run Jest on files matching `my-test`, using `config.json` as a +configuration file and display a native OS notification after the run: + +```bash +jest my-test --notify --config=config.json +``` + +If you'd like to learn more about running `jest` through the command line, take +a look at the [Jest CLI Options](CLI.md) page. + +## Additional Configuration + +### Using Babel + +To use [Babel](http://babeljs.io/), install the `babel-jest` and +`regenerator-runtime` packages: + +``` +npm install --save-dev babel-jest babel-core regenerator-runtime +``` + +> Note: If you are using a babel version 7 then you need to install `babel-jest` +> with the following command: +> +> ``` +> npm install --save-dev babel-jest 'babel-core@^7.0.0-0' @babel/core regenerator-runtime +> ``` + +_Note: Explicitly installing `regenerator-runtime` is not needed if you use +`npm` 3 or 4 or Yarn_ + +Don't forget to add a [`.babelrc`](https://babeljs.io/docs/usage/babelrc/) file +in your project's root folder. For example, if you are using ES6 and +[React.js](https://facebook.github.io/react/) with the +[`babel-preset-es2015`](https://babeljs.io/docs/plugins/preset-es2015/) and +[`babel-preset-react`](https://babeljs.io/docs/plugins/preset-react/) presets: + +```json +{ + "presets": ["es2015", "react"] +} +``` + +You are now set up to use all ES6 features and React specific syntax. + +> Note: If you are using a more complicated Babel configuration, using Babel's +> `env` option, keep in mind that Jest will automatically define `NODE_ENV` as +> `test`. It will not use `development` section like Babel does by default when +> no `NODE_ENV` is set. + +> Note: If you've turned off transpilation of ES2015 modules with the option +> `{ "modules": false }`, you have to make sure to turn this on in your test +> environment. + +```json +{ + "presets": [["es2015", {"modules": false}], "react"], + "env": { + "test": { + "presets": [["es2015"], "react"] + } + } +} +``` + +> Note: `babel-jest` is automatically installed when installing Jest and will +> automatically transform files if a babel configuration exists in your project. +> To avoid this behavior, you can explicitly reset the `transform` configuration +> option: + +```json +// package.json +{ + "jest": { + "transform": {} + } +} +``` + +### Using webpack + +Jest can be used in projects that use [webpack](https://webpack.github.io/) to +manage assets, styles, and compilation. webpack does offer some unique +challenges over other tools. Refer to the [webpack guide](Webpack.md) to get +started. + +### Using TypeScript + +To use TypeScript in your tests you can use +[ts-jest](https://github.com/kulshekhar/ts-jest). diff --git a/website/versioned_docs/version-22.0/GlobalAPI.md b/website/versioned_docs/version-22.0/GlobalAPI.md new file mode 100644 index 000000000000..a863b53d8534 --- /dev/null +++ b/website/versioned_docs/version-22.0/GlobalAPI.md @@ -0,0 +1,413 @@ +--- +id: version-22.0-api +title: Globals +original_id: api +--- + +In your test files, Jest puts each of these methods and objects into the global +environment. You don't have to require or import anything to use them. + +## Methods + + + +--- + +## Reference + +### `afterAll(fn, timeout)` + +Runs a function after all the tests in this file have completed. If the function +returns a promise or is a generator, Jest waits for that promise to resolve +before continuing. + +Optionally, you can provide a `timeout` (in milliseconds) for specifying how +long to wait before aborting. _Note: The default timeout is 5 seconds._ + +This is often useful if you want to clean up some global setup state that is +shared across tests. + +For example: + +```js +const globalDatabase = makeGlobalDatabase(); + +function cleanUpDatabase(db) { + db.cleanUp(); +} + +afterAll(() => { + cleanUpDatabase(globalDatabase); +}); + +test('can find things', () => { + return globalDatabase.find('thing', {}, results => { + expect(results.length).toBeGreaterThan(0); + }); +}); + +test('can insert a thing', () => { + return globalDatabase.insert('thing', makeThing(), response => { + expect(response.success).toBeTruthy(); + }); +}); +``` + +Here the `afterAll` ensures that `cleanUpDatabase` is called after all tests +run. + +If `afterAll` is inside a `describe` block, it runs at the end of the describe +block. + +If you want to run some cleanup after every test instead of after all tests, use +`afterEach` instead. + +### `afterEach(fn, timeout)` + +Runs a function after each one of the tests in this file completes. If the +function returns a promise or is a generator, Jest waits for that promise to +resolve before continuing. + +Optionally, you can provide a `timeout` (in milliseconds) for specifying how +long to wait before aborting. _Note: The default timeout is 5 seconds._ + +This is often useful if you want to clean up some temporary state that is +created by each test. + +For example: + +```js +const globalDatabase = makeGlobalDatabase(); + +function cleanUpDatabase(db) { + db.cleanUp(); +} + +afterEach(() => { + cleanUpDatabase(globalDatabase); +}); + +test('can find things', () => { + return globalDatabase.find('thing', {}, results => { + expect(results.length).toBeGreaterThan(0); + }); +}); + +test('can insert a thing', () => { + return globalDatabase.insert('thing', makeThing(), response => { + expect(response.success).toBeTruthy(); + }); +}); +``` + +Here the `afterEach` ensures that `cleanUpDatabase` is called after each test +runs. + +If `afterEach` is inside a `describe` block, it only runs after the tests that +are inside this describe block. + +If you want to run some cleanup just once, after all of the tests run, use +`afterAll` instead. + +### `beforeAll(fn, timeout)` + +Runs a function before any of the tests in this file run. If the function +returns a promise or is a generator, Jest waits for that promise to resolve +before running tests. + +Optionally, you can provide a `timeout` (in milliseconds) for specifying how +long to wait before aborting. _Note: The default timeout is 5 seconds._ + +This is often useful if you want to set up some global state that will be used +by many tests. + +For example: + +```js +const globalDatabase = makeGlobalDatabase(); + +beforeAll(() => { + // Clears the database and adds some testing data. + // Jest will wait for this promise to resolve before running tests. + return globalDatabase.clear().then(() => { + return globalDatabase.insert({testData: 'foo'}); + }); +}); + +// Since we only set up the database once in this example, it's important +// that our tests don't modify it. +test('can find things', () => { + return globalDatabase.find('thing', {}, results => { + expect(results.length).toBeGreaterThan(0); + }); +}); +``` + +Here the `beforeAll` ensures that the database is set up before tests run. If +setup was synchronous, you could just do this without `beforeAll`. The key is +that Jest will wait for a promise to resolve, so you can have asynchronous setup +as well. + +If `beforeAll` is inside a `describe` block, it runs at the beginning of the +describe block. + +If you want to run something before every test instead of before any test runs, +use `beforeEach` instead. + +### `beforeEach(fn, timeout)` + +Runs a function before each of the tests in this file runs. If the function +returns a promise or is a generator, Jest waits for that promise to resolve +before running the test. + +Optionally, you can provide a `timeout` (in milliseconds) for specifying how +long to wait before aborting. _Note: The default timeout is 5 seconds._ + +This is often useful if you want to reset some global state that will be used by +many tests. + +For example: + +```js +const globalDatabase = makeGlobalDatabase(); + +beforeEach(() => { + // Clears the database and adds some testing data. + // Jest will wait for this promise to resolve before running tests. + return globalDatabase.clear().then(() => { + return globalDatabase.insert({testData: 'foo'}); + }); +}); + +test('can find things', () => { + return globalDatabase.find('thing', {}, results => { + expect(results.length).toBeGreaterThan(0); + }); +}); + +test('can insert a thing', () => { + return globalDatabase.insert('thing', makeThing(), response => { + expect(response.success).toBeTruthy(); + }); +}); +``` + +Here the `beforeEach` ensures that the database is reset for each test. + +If `beforeEach` is inside a `describe` block, it runs for each test in the +describe block. + +If you only need to run some setup code once, before any tests run, use +`beforeAll` instead. + +### `describe(name, fn)` + +`describe(name, fn)` creates a block that groups together several related tests +in one "test suite". For example, if you have a `myBeverage` object that is +supposed to be delicious but not sour, you could test it with: + +```js +const myBeverage = { + delicious: true, + sour: false, +}; + +describe('my beverage', () => { + test('is delicious', () => { + expect(myBeverage.delicious).toBeTruthy(); + }); + + test('is not sour', () => { + expect(myBeverage.sour).toBeFalsy(); + }); +}); +``` + +This isn't required - you can just write the `test` blocks directly at the top +level. But this can be handy if you prefer your tests to be organized into +groups. + +You can also nest `describe` blocks if you have a hierarchy of tests: + +```js +const binaryStringToNumber = binString => { + if (!/^[01]+$/.test(binString)) { + throw new CustomError('Not a binary number.'); + } + + return parseInt(binString, 2); +}; + +describe('binaryStringToNumber', () => { + describe('given an invalid binary string', () => { + test('composed of non-numbers throws CustomError', () => { + expect(() => binaryStringToNumber('abc')).toThrowError(CustomError); + }); + + test('with extra whitespace throws CustomError', () => { + expect(() => binaryStringToNumber(' 100')).toThrowError(CustomError); + }); + }); + + describe('given a valid binary string', () => { + test('returns the correct number', () => { + expect(binaryStringToNumber('100')).toBe(4); + }); + }); +}); +``` + +### `describe.only(name, fn)` + +Also under the alias: `fdescribe(name, fn)` + +You can use `describe.only` if you want to run only one describe block: + +```js +describe.only('my beverage', () => { + test('is delicious', () => { + expect(myBeverage.delicious).toBeTruthy(); + }); + + test('is not sour', () => { + expect(myBeverage.sour).toBeFalsy(); + }); +}); + +describe('my other beverage', () => { + // ... will be skipped +}); +``` + +### `describe.skip(name, fn)` + +Also under the alias: `xdescribe(name, fn)` + +You can use `describe.skip` if you do not want to run a particular describe +block: + +```js +describe('my beverage', () => { + test('is delicious', () => { + expect(myBeverage.delicious).toBeTruthy(); + }); + + test('is not sour', () => { + expect(myBeverage.sour).toBeFalsy(); + }); +}); + +describe.skip('my other beverage', () => { + // ... will be skipped +}); +``` + +Using `describe.skip` is often just an easier alternative to temporarily +commenting out a chunk of tests. + +### `require.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the +module should receive a mock implementation or not. + +### `require.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on +whether the module should be required normally or not. + +### `test(name, fn, timeout)` + +Also under the alias: `it(name, fn, timeout)` + +All you need in a test file is the `test` method which runs a test. For example, +let's say there's a function `inchesOfRain()` that should be zero. Your whole +test could be: + +```js +test('did not rain', () => { + expect(inchesOfRain()).toBe(0); +}); +``` + +The first argument is the test name; the second argument is a function that +contains the expectations to test. The third argument (optional) is `timeout` +(in milliseconds) for specifying how long to wait before aborting. _Note: The +default timeout is 5 seconds._ + +> Note: If a **promise is returned** from `test`, Jest will wait for the promise +> to resolve before letting the test complete. Jest will also wait if you +> **provide an argument to the test function**, usually called `done`. This +> could be handy when you want to test callbacks. See how to test async code +> [here](TestingAsyncCode.md#callbacks). + +For example, let's say `fetchBeverageList()` returns a promise that is supposed +to resolve to a list that has `lemon` in it. You can test this with: + +```js +test('has lemon in it', () => { + return fetchBeverageList().then(list => { + expect(list).toContain('lemon'); + }); +}); +``` + +Even though the call to `test` will return right away, the test doesn't complete +until the promise resolves as well. + +### `test.only(name, fn, timeout)` + +Also under the aliases: `it.only(name, fn, timeout)` or `fit(name, fn, timeout)` + +When you are debugging a large test file, you will often only want to run a +subset of tests. You can use `.only` to specify which tests are the only ones +you want to run in that test file. + +Optionally, you can provide a `timeout` (in milliseconds) for specifying how +long to wait before aborting. _Note: The default timeout is 5 seconds._ + +For example, let's say you had these tests: + +```js +test.only('it is raining', () => { + expect(inchesOfRain()).toBeGreaterThan(0); +}); + +test('it is not snowing', () => { + expect(inchesOfSnow()).toBe(0); +}); +``` + +Only the "it is raining" test will run in that test file, since it is run with +`test.only`. + +Usually you wouldn't check code using `test.only` into source control - you +would use it just for debugging, and remove it once you have fixed the broken +tests. + +### `test.skip(name, fn)` + +Also under the aliases: `it.skip(name, fn)` or `xit(name, fn)` or +`xtest(name, fn)` + +When you are maintaining a large codebase, you may sometimes find a test that is +temporarily broken for some reason. If you want to skip running this test, but +you don't want to just delete this code, you can use `test.skip` to specify some +tests to skip. + +For example, let's say you had these tests: + +```js +test('it is raining', () => { + expect(inchesOfRain()).toBeGreaterThan(0); +}); + +test.skip('it is not snowing', () => { + expect(inchesOfSnow()).toBe(0); +}); +``` + +Only the "it is raining" test will run, since the other test is run with +`test.skip`. + +You could simply comment the test out, but it's often a bit nicer to use +`test.skip` because it will maintain indentation and syntax highlighting. diff --git a/website/versioned_docs/version-22.0/JestObjectAPI.md b/website/versioned_docs/version-22.0/JestObjectAPI.md new file mode 100644 index 000000000000..2d9a4050239d --- /dev/null +++ b/website/versioned_docs/version-22.0/JestObjectAPI.md @@ -0,0 +1,483 @@ +--- +id: version-22.0-jest-object +title: The Jest Object +original_id: jest-object +--- + +The `jest` object is automatically in scope within every test file. The methods +in the `jest` object help create mocks and let you control Jest's overall +behavior. + +## Methods + +* [`jest.clearAllTimers()`](#jestclearalltimers) +* [`jest.disableAutomock()`](#jestdisableautomock) +* [`jest.enableAutomock()`](#jestenableautomock) +* [`jest.fn(implementation)`](#jestfnimplementation) +* [`jest.isMockFunction(fn)`](#jestismockfunctionfn) +* [`jest.genMockFromModule(moduleName)`](#jestgenmockfrommodulemodulename) +* [`jest.mock(moduleName, factory, options)`](#jestmockmodulename-factory-options) +* [`jest.unmock(moduleName)`](#jestunmockmodulename) +* [`jest.doMock(moduleName, factory, options)`](#jestdomockmodulename-factory-options) +* [`jest.dontMock(moduleName)`](#jestdontmockmodulename) +* [`jest.clearAllMocks()`](#jestclearallmocks) +* [`jest.resetAllMocks()`](#jestresetallmocks) +* [`jest.restoreAllMocks()`](#jestrestoreallmocks) +* [`jest.resetModules()`](#jestresetmodules) +* [`jest.runAllTicks()`](#jestrunallticks) +* [`jest.runAllTimers()`](#jestrunalltimers) +* [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) +* [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +* [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) +* [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) +* [`jest.useFakeTimers()`](#jestusefaketimers) +* [`jest.useRealTimers()`](#jestuserealtimers) +* [`jest.spyOn(object, methodName)`](#jestspyonobject-methodname) + +--- + +## Reference + +### `jest.clearAllTimers()` + +Removes any pending timers from the timer system. + +This means, if any timers have been scheduled (but have not yet executed), they +will be cleared and will never have the opportunity to execute in the future. + +### `jest.disableAutomock()` + +Disables automatic mocking in the module loader. + +After this method is called, all `require()`s will return the real versions of +each module (rather than a mocked version). + +This is usually useful when you have a scenario where the number of dependencies +you want to mock is far less than the number of dependencies that you don't. For +example, if you're writing a test for a module that uses a large number of +dependencies that can be reasonably classified as "implementation details" of +the module, then you likely do not want to mock them. + +Examples of dependencies that might be considered "implementation details" are +things ranging from language built-ins (e.g. Array.prototype methods) to highly +common utility methods (e.g. underscore/lo-dash, array utilities etc) and entire +libraries like React.js. + +Returns the `jest` object for chaining. + +_Note: this method was previously called `autoMockOff`. When using `babel-jest`, +calls to `disableAutomock` will automatically be hoisted to the top of the code +block. Use `autoMockOff` if you want to explicitly avoid this behavior._ + +### `jest.enableAutomock()` + +Enables automatic mocking in the module loader. + +Returns the `jest` object for chaining. + +_Note: this method was previously called `autoMockOn`. When using `babel-jest`, +calls to `enableAutomock` will automatically be hoisted to the top of the code +block. Use `autoMockOn` if you want to explicitly avoid this behavior._ + +### `jest.fn(implementation)` + +Returns a new, unused [mock function](MockFunctionAPI.md). Optionally takes a +mock implementation. + +```js +const mockFn = jest.fn(); +mockFn(); +expect(mockFn).toHaveBeenCalled(); + +// With a mock implementation: +const returnsTrue = jest.fn(() => true); +console.log(returnsTrue()); // true; +``` + +### `jest.isMockFunction(fn)` + +Determines if the given function is a mocked function. + +### `jest.genMockFromModule(moduleName)` + +Given the name of a module, use the automatic mocking system to generate a +mocked version of the module for you. + +This is useful when you want to create a [manual mock](ManualMocks.md) that +extends the automatic mock's behavior. + +### `jest.mock(moduleName, factory, options)` + +Mocks a module with an auto-mocked version when it is being required. `factory` +and `options` are optional. For example: + +```js +// banana.js +module.exports = () => 'banana'; + +// __tests__/test.js +jest.mock('../banana'); + +const banana = require('../banana'); // banana will be explicitly mocked. + +banana(); // will return 'undefined' because the function is auto-mocked. +``` + +The second argument can be used to specify an explicit module factory that is +being run instead of using Jest's automocking feature: + +```js +jest.mock('../moduleName', () => { + return jest.fn(() => 42); +}); + +// This runs the function specified as second argument to `jest.mock`. +const moduleName = require('../moduleName'); +moduleName(); // Will return '42'; +``` + +The third argument can be used to create virtual mocks – mocks of modules that +don't exist anywhere in the system: + +```js +jest.mock( + '../moduleName', + () => { + /* + * Custom implementation of a module that doesn't exist in JS, + * like a generated module or a native module in react-native. + */ + }, + {virtual: true}, +); +``` + +_Warning: Importing a module in a setup file (as specified by +`setupTestFrameworkScriptFile`) will prevent mocking for the module in question, +as well as all the modules that it imports._ + +Modules that are mocked with `jest.mock` are mocked only for the file that calls +`jest.mock`. Another file that imports the module will get the original +implementation even if run after the test file that mocks the module. + +Returns the `jest` object for chaining. + +### `jest.unmock(moduleName)` + +Indicates that the module system should never return a mocked version of the +specified module from `require()` (e.g. that it should always return the real +module). + +The most common use of this API is for specifying the module a given test +intends to be testing (and thus doesn't want automatically mocked). + +Returns the `jest` object for chaining. + +### `jest.doMock(moduleName, factory, options)` + +When using `babel-jest`, calls to `mock` will automatically be hoisted to the +top of the code block. Use this method if you want to explicitly avoid this +behavior. + +One example when this is useful is when you want to mock a module differently +within the same file: + +```js +beforeEach(() => { + jest.resetModules(); +}); + +test('moduleName 1', () => { + jest.doMock('../moduleName', () => { + return jest.fn(() => 1); + }); + const moduleName = require('../moduleName'); + expect(moduleName()).toEqual(1); +}); + +test('moduleName 2', () => { + jest.doMock('../moduleName', () => { + return jest.fn(() => 2); + }); + const moduleName = require('../moduleName'); + expect(moduleName()).toEqual(2); +}); +``` + +Returns the `jest` object for chaining. + +### `jest.dontMock(moduleName)` + +When using `babel-jest`, calls to `unmock` will automatically be hoisted to the +top of the code block. Use this method if you want to explicitly avoid this +behavior. + +Returns the `jest` object for chaining. + +### `jest.clearAllMocks()` + +Clears the `mock.calls` and `mock.instances` properties of all mocks. Equivalent +to calling `.mockClear()` on every mocked function. + +Returns the `jest` object for chaining. + +### `jest.resetAllMocks()` + +Resets the state of all mocks. Equivalent to calling `.mockReset()` on every +mocked function. + +Returns the `jest` object for chaining. + +### `jest.restoreAllMocks()` + +##### available in Jest **21.1.0+** + +Restores all mocks back to their original value. Equivalent to calling +`.mockRestore` on every mocked function. Beware that `jest.restoreAllMocks()` +only works when mock was created with `jest.spyOn`; other mocks will require you +to manually restore them. + +### `jest.resetModules()` + +Resets the module registry - the cache of all required modules. This is useful +to isolate modules where local state might conflict between tests. + +Example: + +```js +const sum1 = require('../sum'); +jest.resetModules(); +const sum2 = require('../sum'); +sum1 === sum2; +// > false (Both sum modules are separate "instances" of the sum module.) +``` + +Example in a test: + +```js +beforeEach(() => { + jest.resetModules(); +}); + +test('works', () => { + const sum = require('../sum'); +}); + +test('works too', () => { + const sum = require('../sum'); + // sum is a different copy of the sum module from the previous test. +}); +``` + +Returns the `jest` object for chaining. + +### `jest.runAllTicks()` + +Exhausts the **micro**-task queue (usually interfaced in node via +`process.nextTick`). + +When this API is called, all pending micro-tasks that have been queued via +`process.nextTick` will be executed. Additionally, if those micro-tasks +themselves schedule new micro-tasks, those will be continually exhausted until +there are no more micro-tasks remaining in the queue. + +### `jest.runAllTimers()` + +Exhausts the **macro**-task queue (i.e., all tasks queued by `setTimeout()`, +`setInterval()`, and `setImmediate()`). + +When this API is called, all pending "macro-tasks" that have been queued via +`setTimeout()` or `setInterval()` will be executed. Additionally if those +macro-tasks themselves schedule new macro-tasks, those will be continually +exhausted until there are no more macro-tasks remaining in the queue. + +This is often useful for synchronously executing setTimeouts during a test in +order to synchronously assert about some behavior that would only happen after +the `setTimeout()` or `setInterval()` callbacks executed. See the +[Timer mocks](TimerMocks.md) doc for more information. + +### `jest.runAllImmediates()` + +Exhausts all tasks queued by `setImmediate()`. + +### `jest.advanceTimersByTime(msToRun)` + +##### renamed in Jest **22.0.0+** + +Also under the alias: `.runTimersToTime()` + +Executes only the macro task queue (i.e. all tasks queued by `setTimeout()` or +`setInterval()` and `setImmediate()`). + +When this API is called, all timers are advanced by `msToRun` milliseconds. All +pending "macro-tasks" that have been queued via `setTimeout()` or +`setInterval()`, and would be executed within this timeframe will be executed. +Additionally if those macro-tasks schedule new macro-tasks that would be +executed within the same time frame, those will be executed until there are no +more macro-tasks remaining in the queue, that should be run within `msToRun` +milliseconds. + +### `jest.runOnlyPendingTimers()` + +Executes only the macro-tasks that are currently pending (i.e., only the tasks +that have been queued by `setTimeout()` or `setInterval()` up to this point). If +any of the currently pending macro-tasks schedule new macro-tasks, those new +tasks will not be executed by this call. + +This is useful for scenarios such as one where the module being tested schedules +a `setTimeout()` whose callback schedules another `setTimeout()` recursively +(meaning the scheduling never stops). In these scenarios, it's useful to be able +to run forward in time by a single step at a time. + +### `jest.setMock(moduleName, moduleExports)` + +Explicitly supplies the mock object that the module system should return for the +specified module. + +On occasion there are times where the automatically generated mock the module +system would normally provide you isn't adequate enough for your testing needs. +Normally under those circumstances you should write a +[manual mock](ManualMocks.md) that is more adequate for the module in question. +However, on extremely rare occasions, even a manual mock isn't suitable for your +purposes and you need to build the mock yourself inside your test. + +In these rare scenarios you can use this API to manually fill the slot in the +module system's mock-module registry. + +Returns the `jest` object for chaining. + +_Note It is recommended to use +[`jest.mock()`](#jestmockmodulename-factory-options) instead. The `jest.mock` +API's second argument is a module factory instead of the expected exported +module object._ + +### `jest.setTimeout(timeout)` + +Set the default timeout interval for tests and before/after hooks in +milliseconds. + +_Note: The default timeout interval is 5 seconds if this method is not called._ + +Example: + +```js +jest.setTimeout(1000); // 1 second +``` + +### `jest.useFakeTimers()` + +Instructs Jest to use fake versions of the standard timer functions +(`setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `nextTick`, +`setImmediate` and `clearImmediate`). + +Returns the `jest` object for chaining. + +### `jest.useRealTimers()` + +Instructs Jest to use the real versions of the standard timer functions. + +Returns the `jest` object for chaining. + +### `jest.spyOn(object, methodName)` + +##### available in Jest **19.0.0+** + +Creates a mock function similar to `jest.fn` but also tracks calls to +`object[methodName]`. Returns a Jest mock function. + +_Note: By default, `jest.spyOn` also calls the **spied** method. This is +different behavior from most other test libraries. If you want to overwrite the +original function, you can use +`jest.spyOn(object, methodName).mockImplementation(() => customImplementation)` +or `object[methodName] = jest.fn(() => customImplementation);`_ + +Example: + +```js +const video = { + play() { + return true; + }, +}; + +module.exports = video; +``` + +Example test: + +```js +const video = require('./video'); + +test('plays video', () => { + const spy = jest.spyOn(video, 'play'); + const isPlaying = video.play(); + + expect(spy).toHaveBeenCalled(); + expect(isPlaying).toBe(true); + + spy.mockReset(); + spy.mockRestore(); +}); +``` + +### `jest.spyOn(object, methodName, accessType?)` + +##### available in Jest **22.1.0+** + +Since Jest 22.1.0+, the `jest.spyOn` method takes an optional third argument of +`accessType` that can be either `'get'` or `'set'`, which proves to be useful +when you want to spy on a getter or a setter, respectively. + +Example: + +```js +const video = { + // it's a getter! + get play() { + return true; + }, +}; + +module.exports = video; + +const audio = { + _volume: false, + // it's a setter! + set volume(value) { + this._volume = value; + }, + get volume() { + return this._volume; + }, +}; + +module.exports = video; +``` + +Example test: + +```js +const video = require('./video'); + +test('plays video', () => { + const spy = jest.spyOn(video, 'play', 'get'); // we pass 'get' + const isPlaying = video.play; + + expect(spy).toHaveBeenCalled(); + expect(isPlaying).toBe(true); + + spy.mockReset(); + spy.mockRestore(); +}); + +test('plays audio', () => { + const spy = jest.spyOn(video, 'play', 'set'); // we pass 'set' + video.volume = 100; + + expect(spy).toHaveBeenCalled(); + expect(video.volume).toBe(100); + + spy.mockReset(); + spy.mockRestore(); +}); +``` diff --git a/website/versioned_docs/version-22.0/JestPlatform.md b/website/versioned_docs/version-22.0/JestPlatform.md new file mode 100644 index 000000000000..438f732f1c2d --- /dev/null +++ b/website/versioned_docs/version-22.0/JestPlatform.md @@ -0,0 +1,197 @@ +--- +id: version-22.0-jest-platform +title: Jest Platform +original_id: jest-platform +--- + +You can cherry pick specific features of Jest and use them as standalone +packages. Here's a list of the available packages: + +## jest-changed-files + +Tool for identifying modified files in a git/hg repository. Exports two +functions: + +* `getChangedFilesForRoots` returns a promise that resolves to an object with + the changed files and repos. +* `findRepos` returns a promise that resolves to a set of repositories contained + in the specified path. + +### Example + +```javascript +const {getChangedFilesForRoots} = require('jest-changed-files'); + +// print the set of modified files since last commit in the current repo +getChangedFilesForRoots(['./'], { + lastCommit: true, +}).then(result => console.log(result.changedFiles)); +``` + +You can read more about `jest-changed-files` in the +[readme file](https://github.com/facebook/jest/blob/master/packages/jest-changed-files/README.md). + +## jest-diff + +Tool for visualizing changes in data. Exports a function that compares two +values of any type and returns a "pretty-printed" string illustrating the +difference between the two arguments. + +### Example + +```javascript +const diff = require('jest-diff'); + +const a = {a: {b: {c: 5}}}; +const b = {a: {b: {c: 6}}}; + +const result = diff(a, b); + +// print diff +console.log(result); +``` + +## jest-docblock + +Tool for extracting and parsing the comments at the top of a JavaScript file. +Exports various function to manipulate the data inside the comment block. + +### Example + +```javascript +const {parseWithComments} = require('jest-docblock'); + +const code = ` +/** + * This is a sample + * + * @flow + */ + + console.log('Hello World!'); +`; + +const parsed = parseWithComments(code); + +// prints an object with two attributes: comments and pragmas. +console.log(parsed); +``` + +You can read more about `jest-docblock` in the +[readme file](https://github.com/facebook/jest/blob/master/packages/jest-docblock/README.md). + +## jest-get-type + +Module that identifies the primitive type of any JavaScript value. Exports a +function that returns a string with the type of the value passed as argument. + +### Example + +```javascript +const getType = require('jest-get-type'); + +const array = [1, 2, 3]; +const nullValue = null; +const undefinedValue = undefined; + +// prints 'array' +console.log(getType(array)); +// prints 'null' +console.log(getType(nullValue)); +// prints 'undefined' +console.log(getType(undefinedValue)); +``` + +## jest-validate + +Tool for validating configurations submitted by users. Exports a function that +takes two arguments: the user's configuration and an object containing an +example configuration and other options. The return value is an object with two +attributes: + +* `hasDeprecationWarnings`, a boolean indicating whether the submitted + configuration has deprecation warnings, +* `isValid`, a boolean indicating whether the configuration is correct or not. + +### Example + +```javascript +const {validate} = require('jest-validate'); + +const configByUser = { + transform: '/node_modules/my-custom-transform', +}; + +const result = validate(configByUser, { + comment: ' Documentation: http://custom-docs.com', + exampleConfig: {transform: '/node_modules/babel-jest'}, +}); + +console.log(result); +``` + +You can read more about `jest-validate` in the +[readme file](https://github.com/facebook/jest/blob/master/packages/jest-validate/README.md). + +## jest-worker + +Module used for parallelization of tasks. Exports a class `Worker` that takes +the path of Node.js module and lets you call the module's exported methods as if +they where class methods, returning a promise that resolves when the specified +method finishes its execution in a forked process. + +### Example + +```javascript +// heavy-task.js + +module.exports = { + myHeavyTask: args => { + // long running CPU intensive task. + }, +}; +``` + +```javascript +// main.js + +async function main() { + const worker = new Worker(require.resolve('./heavy-task.js')); + + // run 2 tasks in parellel with different arguments + const results = await Promise.all([ + worker.myHeavyTask({foo: 'bar'}), + worker.myHeavyTask({bar: 'foo'}), + ]); + + console.log(results); +} + +main(); +``` + +You can read more about `jest-worker` in the +[readme file](https://github.com/facebook/jest/blob/master/packages/jest-worker/README.md). + +## pretty-format + +Exports a function that converts any JavaScript value into a human-readable +string. Supports all built-in JavaScript types out of the box and allows +extension for application-specific types via user-defined plugins. + +### Example + +```javascript +const prettyFormat = require('pretty-format'); + +const val = {object: {}}; +val.circularReference = val; +val[Symbol('foo')] = 'foo'; +val.map = new Map([['prop', 'value']]); +val.array = [-0, Infinity, NaN]; + +console.log(prettyFormat(val)); +``` + +You can read more about `pretty-format` in the +[readme file](https://github.com/facebook/jest/blob/master/packages/pretty-format/README.md). diff --git a/website/versioned_docs/version-22.0/ManualMocks.md b/website/versioned_docs/version-22.0/ManualMocks.md new file mode 100644 index 000000000000..4c8f02937a8c --- /dev/null +++ b/website/versioned_docs/version-22.0/ManualMocks.md @@ -0,0 +1,157 @@ +--- +id: version-22.0-manual-mocks +title: Manual Mocks +original_id: manual-mocks +--- + +Manual mocks are used to stub out functionality with mock data. For example, +instead of accessing a remote resource like a website or a database, you might +want to create a manual mock that allows you to use fake data. This ensures your +tests will be fast and not flaky. + +Manual mocks are defined by writing a module in a `__mocks__/` subdirectory +immediately adjacent to the module. For example, to mock a module called `user` +in the `models` directory, create a file called `user.js` and put it in the +`models/__mocks__` directory. Note that the `__mocks__` folder is +case-sensitive, so naming the directory `__MOCKS__` will break on some systems. +If the module you are mocking is a node module (eg: `fs`), the mock should be +placed in the `__mocks__` directory adjacent to `node_modules` (unless you +configured [`roots`](Configuration.md#roots-array-string) to point to a folder +other than the project root). Eg: + +```bash +. +├── config +├── __mocks__ +│   └── fs.js +├── models +│   ├── __mocks__ +│   │   └── user.js +│   └── user.js +├── node_modules +└── views +``` + +When a manual mock exists for a given module, Jest's module system will use that +module when explicitly calling `jest.mock('moduleName')`. However, manual mocks +will take precedence over node modules even if `jest.mock('moduleName')` is not +called. To opt out of this behavior you will need to explicitly call +`jest.unmock('moduleName')` in tests that should use the actual module +implementation. + +Here's a contrived example where we have a module that provides a summary of all +the files in a given directory. + +```javascript +// FileSummarizer.js +'use strict'; + +const fs = require('fs'); + +function summarizeFilesInDirectorySync(directory) { + return fs.readdirSync(directory).map(fileName => ({ + directory, + fileName, + })); +} + +exports.summarizeFilesInDirectorySync = summarizeFilesInDirectorySync; +``` + +Since we'd like our tests to avoid actually hitting the disk (that's pretty slow +and fragile), we create a manual mock for the `fs` module by extending an +automatic mock. Our manual mock will implement custom versions of the `fs` APIs +that we can build on for our tests: + +```javascript +// __mocks__/fs.js +'use strict'; + +const path = require('path'); + +const fs = jest.genMockFromModule('fs'); + +// This is a custom function that our tests can use during setup to specify +// what the files on the "mock" filesystem should look like when any of the +// `fs` APIs are used. +let mockFiles = Object.create(null); +function __setMockFiles(newMockFiles) { + mockFiles = Object.create(null); + for (const file in newMockFiles) { + const dir = path.dirname(file); + + if (!mockFiles[dir]) { + mockFiles[dir] = []; + } + mockFiles[dir].push(path.basename(file)); + } +} + +// A custom version of `readdirSync` that reads from the special mocked out +// file list set via __setMockFiles +function readdirSync(directoryPath) { + return mockFiles[directoryPath] || []; +} + +fs.__setMockFiles = __setMockFiles; +fs.readdirSync = readdirSync; + +module.exports = fs; +``` + +Now we write our test: + +```javascript +// __tests__/FileSummarizer-test.js +'use strict'; + +jest.mock('fs'); + +describe('listFilesInDirectorySync', () => { + const MOCK_FILE_INFO = { + '/path/to/file1.js': 'console.log("file1 contents");', + '/path/to/file2.txt': 'file2 contents', + }; + + beforeEach(() => { + // Set up some mocked out file info before each test + require('fs').__setMockFiles(MOCK_FILE_INFO); + }); + + test('includes all files in the directory in the summary', () => { + const FileSummarizer = require('../FileSummarizer'); + const fileSummary = FileSummarizer.summarizeFilesInDirectorySync( + '/path/to', + ); + + expect(fileSummary.length).toBe(2); + }); +}); +``` + +The example mock shown here uses +[`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to +generate an automatic mock, and overrides its default behavior. This is the +recommended approach, but is completely optional. If you do not want to use the +automatic mock at all, you can simply export your own functions from the mock +file. One downside to fully manual mocks is that they're manual – meaning you +have to manually update them any time the module they are mocking changes. +Because of this, it's best to use or extend the automatic mock when it works for +your needs. + +To ensure that a manual mock and its real implementation stay in sync, it might +be useful to require the real module using `require.requireActual(moduleName)` +in your manual mock and amending it with mock functions before exporting it. + +The code for this example is available at +[examples/manual_mocks](https://github.com/facebook/jest/tree/master/examples/manual_mocks). + +### Using with ES module imports + +If you're using +[ES module imports](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import) +then you'll normally be inclined to put your `import` statements at the top of +the test file. But often you need to instruct Jest to use a mock before modules +use it. For this reason, Jest will automatically hoist `jest.mock` calls to the +top of the module (before any imports). To learn more about this and see it in +action, see [this repo](https://github.com/kentcdodds/how-jest-mocking-works). diff --git a/website/versioned_docs/version-22.0/MigrationGuide.md b/website/versioned_docs/version-22.0/MigrationGuide.md new file mode 100644 index 000000000000..336c472e830b --- /dev/null +++ b/website/versioned_docs/version-22.0/MigrationGuide.md @@ -0,0 +1,48 @@ +--- +id: version-22.0-migration-guide +title: Migrating to Jest +original_id: migration-guide +--- + +If you'd like to try out Jest with an existing codebase, there are a number of +ways to convert to Jest: + +* If you are using Jasmine, or a Jasmine like API (for example + [Mocha](https://mochajs.org)), Jest should be mostly compatible and easy to + migrate to. +* If you are using AVA, Expect.js (by Automattic), Jasmine, Mocha, proxyquire, + Should.js or Tape you can automatically migrate with Jest Codemods (see + below). +* If you like [chai](http://chaijs.com/), you can upgrade to Jest and continue + using chai. However, we recommend trying out Jest's assertions and their + failure messages. Jest Codemods can migrate from chai (see below). + +### jest-codemods + +If you are using [AVA](https://github.com/avajs/ava), +[Chai](https://github.com/chaijs/chai), +[Expect.js (by Automattic)](https://github.com/Automattic/expect.js), +[Jasmine](https://github.com/jasmine/jasmine), +[Mocha](https://github.com/mochajs/mocha), +[proxyquire](https://github.com/thlorenz/proxyquire), +[Should.js](https://github.com/tj/should.js/) or +[Tape](https://github.com/substack/tape) you can use the third-party +[jest-codemods](https://github.com/skovhus/jest-codemods) to do most of the +dirty migration work. It runs a code transformation on your codebase using +[jscodeshift](https://github.com/facebook/jscodeshift). + +Install Jest Codemods with `npm` by running: + +``` +npm install -g jest-codemods +``` + +To transform your existing tests, navigate to the project containing the tests +and run: + +``` +jest-codemods +``` + +More information can be found at +[https://github.com/skovhus/jest-codemods](https://github.com/skovhus/jest-codemods). diff --git a/website/versioned_docs/version-22.0/MockFunctionAPI.md b/website/versioned_docs/version-22.0/MockFunctionAPI.md new file mode 100644 index 000000000000..2ec7bb0d3856 --- /dev/null +++ b/website/versioned_docs/version-22.0/MockFunctionAPI.md @@ -0,0 +1,241 @@ +--- +id: version-22.0-mock-function-api +title: Mock Functions +original_id: mock-function-api +--- + +Mock functions are also known as "spies", because they let you spy on the +behavior of a function that is called indirectly by some other code, rather than +just testing the output. You can create a mock function with `jest.fn()`. If no +implementation is given, the mock function will return `undefined` when invoked. + +## Methods + + + +--- + +## Reference + +### `mockFn.getMockName()` + +##### available in Jest **22.0.0+** + +Returns the mock name string set by calling `mockFn.mockName(value)`. + +### `mockFn.mock.calls` + +An array that represents all calls that have been made into this mock function. +Each call is represented by an array of arguments that were passed during the +call. + +For example: A mock function `f` that has been called twice, with the arguments +`f('arg1', 'arg2')`, and then with the arguments `f('arg3', 'arg4')` would have +a `mock.calls` array that looks like this: + +```js +[['arg1', 'arg2'], ['arg3', 'arg4']]; +``` + +### `mockFn.mock.instances` + +An array that contains all the object instances that have been instantiated from +this mock function using `new`. + +For example: A mock function that has been instantiated twice would have the +following `mock.instances` array: + +```js +const mockFn = jest.fn(); + +const a = new mockFn(); +const b = new mockFn(); + +mockFn.mock.instances[0] === a; // true +mockFn.mock.instances[1] === b; // true +``` + +### `mockFn.mockClear()` + +Resets all information stored in the [`mockFn.mock.calls`](#mockfn-mock-calls) +and [`mockFn.mock.instances`](#mockfn-mock-instances) arrays. + +Often this is useful when you want to clean up a mock's usage data between two +assertions. + +Beware that `mockClear` will replace `mockFn.mock`, not just +[`mockFn.mock.calls`](#mockfn-mock-calls) and +[`mockFn.mock.instances`](#mockfn-mock-instances). You should therefore avoid +assigning `mockFn.mock` to other variables, temporary or not, to make sure you +don't access stale data. + +The [`clearMocks`](configuration.html#clearmocks-boolean) configuration option +is available to clear mocks automatically between tests. + +### `mockFn.mockReset()` + +Resets all information stored in the mock, including any initial implementation +and mock name given. + +This is useful when you want to completely restore a mock back to its initial +state. + +Beware that `mockReset` will replace `mockFn.mock`, not just +[`mockFn.mock.calls`](#mockfn-mock-calls) and +[`mockFn.mock.instances`](#mockfn-mock-instances). You should therefore avoid +assigning `mockFn.mock` to other variables, temporary or not, to make sure you +don't access stale data. + +### `mockFn.mockRestore()` + +Removes the mock and restores the initial implementation. + +This is useful when you want to mock functions in certain test cases and restore +the original implementation in others. + +Beware that `mockFn.mockRestore` only works when mock was created with +`jest.spyOn`. Thus you have to take care of restoration yourself when manually +assigning `jest.fn()`. + +### `mockFn.mockImplementation(fn)` + +Accepts a function that should be used as the implementation of the mock. The +mock itself will still record all calls that go into and instances that come +from itself – the only difference is that the implementation will also be +executed when the mock is called. + +_Note: `jest.fn(implementation)` is a shorthand for +`jest.fn().mockImplementation(implementation)`._ + +For example: + +```js +const mockFn = jest.fn().mockImplementation(scalar => 42 + scalar); +// or: jest.fn(scalar => 42 + scalar); + +const a = mockFn(0); +const b = mockFn(1); + +a === 42; // true +b === 43; // true + +mockFn.mock.calls[0][0] === 0; // true +mockFn.mock.calls[1][0] === 1; // true +``` + +`mockImplementation` can also be used to mock class constructors: + +``` +// SomeClass.js +module.exports = class SomeClass { + m(a, b) {} +} + +// OtherModule.test.js +jest.mock('./SomeClass'); // this happens automatically with automocking +const SomeClass = require('./SomeClass') +const mMock = jest.fn() +SomeClass.mockImplementation(() => { + return { + m: mMock + } +}) + +const some = new SomeClass() +some.m('a', 'b') +console.log('Calls to m: ', mMock.mock.calls) +``` + +### `mockFn.mockImplementationOnce(fn)` + +Accepts a function that will be used as an implementation of the mock for one +call to the mocked function. Can be chained so that multiple function calls +produce different results. + +``` +var myMockFn = jest.fn() + .mockImplementationOnce(cb => cb(null, true)) + .mockImplementationOnce(cb => cb(null, false)); + +myMockFn((err, val) => console.log(val)); +> true + +myMockFn((err, val) => console.log(val)); +> false +``` + +When the mocked function runs out of implementations defined with +mockImplementationOnce, it will execute the default implementation set with +`jest.fn(() => defaultValue)` or `.mockImplementation(() => defaultValue)` if +they were called: + +``` +var myMockFn = jest.fn(() => 'default') + .mockImplementationOnce(() => 'first call') + .mockImplementationOnce(() => 'second call'); + +console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); +> 'first call', 'second call', 'default', 'default' +``` + +### `mockFn.mockName(value)` + +##### available in Jest **22.0.0+** + +Accepts a string to use in test result output in place of "jest.fn()" to +indicate which mock function is being referenced. + +For example: + +```js +const mockFn = jest.fn().mockName('mockedFunction'); +// mockFn(); +expect(mockFn).toHaveBeenCalled(); +``` + +Will result in this error: + +``` + expect(mockedFunction).toHaveBeenCalled() + + Expected mock function to have been called. +``` + +### `mockFn.mockReturnThis()` + +Just a simple sugar function for: + +```js +jest.fn(function() { + return this; +}); +``` + +### `mockFn.mockReturnValue(value)` + +Accepts a value that will be returned whenever the mock function is called. + +```js +const mock = jest.fn(); +mock.mockReturnValue(42); +mock(); // 42 +mock.mockReturnValue(43); +mock(); // 43 +``` + +### `mockFn.mockReturnValueOnce(value)` + +Accepts a value that will be returned for one call to the mock function. Can be +chained so that successive calls to the mock function return different values. +When there are no more `mockReturnValueOnce` values to use, calls will return a +value specified by `mockReturnValue`. + +``` +const myMockFn = jest.fn() + .mockReturnValue('default') + .mockReturnValueOnce('first call') + .mockReturnValueOnce('second call'); + +console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); +> 'first call', 'second call', 'default', 'default' +``` diff --git a/website/versioned_docs/version-22.0/MockFunctions.md b/website/versioned_docs/version-22.0/MockFunctions.md new file mode 100644 index 000000000000..28e1e31cde34 --- /dev/null +++ b/website/versioned_docs/version-22.0/MockFunctions.md @@ -0,0 +1,279 @@ +--- +id: version-22.0-mock-functions +title: Mock Functions +original_id: mock-functions +--- + +Mock functions make it easy to test the links between code by erasing the actual +implementation of a function, capturing calls to the function (and the +parameters passed in those calls), capturing instances of constructor functions +when instantiated with `new`, and allowing test-time configuration of return +values. + +There are two ways to mock functions: Either by creating a mock function to use +in test code, or writing a [`manual mock`](ManualMocks.md) to override a module +dependency. + +## Using a mock function + +Let's imagine we're testing an implementation of a function `forEach`, which +invokes a callback for each item in a supplied array. + +```javascript +function forEach(items, callback) { + for (let index = 0; index < items.length; index++) { + callback(items[index]); + } +} +``` + +To test this function, we can use a mock function, and inspect the mock's state +to ensure the callback is invoked as expected. + +```javascript +const mockCallback = jest.fn(); +forEach([0, 1], mockCallback); + +// The mock function is called twice +expect(mockCallback.mock.calls.length).toBe(2); + +// The first argument of the first call to the function was 0 +expect(mockCallback.mock.calls[0][0]).toBe(0); + +// The first argument of the second call to the function was 1 +expect(mockCallback.mock.calls[1][0]).toBe(1); +``` + +## `.mock` property + +All mock functions have this special `.mock` property, which is where data about +how the function has been called is kept. The `.mock` property also tracks the +value of `this` for each call, so it is possible to inspect this as well: + +```javascript +const myMock = jest.fn(); + +const a = new myMock(); +const b = {}; +const bound = myMock.bind(b); +bound(); + +console.log(myMock.mock.instances); +// > [ , ] +``` + +These mock members are very useful in tests to assert how these functions get +called, or instantiated: + +```javascript +// The function was called exactly once +expect(someMockFunction.mock.calls.length).toBe(1); + +// The first arg of the first call to the function was 'first arg' +expect(someMockFunction.mock.calls[0][0]).toBe('first arg'); + +// The second arg of the first call to the function was 'second arg' +expect(someMockFunction.mock.calls[0][1]).toBe('second arg'); + +// This function was instantiated exactly twice +expect(someMockFunction.mock.instances.length).toBe(2); + +// The object returned by the first instantiation of this function +// had a `name` property whose value was set to 'test' +expect(someMockFunction.mock.instances[0].name).toEqual('test'); +``` + +## Mock Return Values + +Mock functions can also be used to inject test values into your code during a +test: + +```javascript +const myMock = jest.fn(); +console.log(myMock()); +// > undefined + +myMock + .mockReturnValueOnce(10) + .mockReturnValueOnce('x') + .mockReturnValue(true); + +console.log(myMock(), myMock(), myMock(), myMock()); +// > 10, 'x', true, true +``` + +Mock functions are also very effective in code that uses a functional +continuation-passing style. Code written in this style helps avoid the need for +complicated stubs that recreate behavior of the real component they're standing +in for, in favor of injecting values directly into the test right before they're +used. + +```javascript +const filterTestFn = jest.fn(); + +// Make the mock return `true` for the first call, +// and `false` for the second call +filterTestFn.mockReturnValueOnce(true).mockReturnValueOnce(false); + +const result = [11, 12].filter(filterTestFn); + +console.log(result); +// > [11] +console.log(filterTestFn.mock.calls); +// > [ [11], [12] ] +``` + +Most real-world examples actually involve getting ahold of a mock function on a +dependent component and configuring that, but the technique is the same. In +these cases, try to avoid the temptation to implement logic inside of any +function that's not directly being tested. + +## Mock Implementations + +Still, there are cases where it's useful to go beyond the ability to specify +return values and full-on replace the implementation of a mock function. This +can be done with `jest.fn` or the `mockImplementationOnce` method on mock +functions. + +```javascript +const myMockFn = jest.fn(cb => cb(null, true)); + +myMockFn((err, val) => console.log(val)); +// > true + +myMockFn((err, val) => console.log(val)); +// > true +``` + +The `mockImplementation` method is useful when you need to define the default +implementation of a mock function that is created from another module: + +```js +// foo.js +module.exports = function() { + // some implementation; +}; + +// test.js +jest.mock('../foo'); // this happens automatically with automocking +const foo = require('../foo'); + +// foo is a mock function +foo.mockImplementation(() => 42); +foo(); +// > 42 +``` + +When you need to recreate a complex behavior of a mock function such that +multiple function calls produce different results, use the +`mockImplementationOnce` method: + +```javascript +const myMockFn = jest + .fn() + .mockImplementationOnce(cb => cb(null, true)) + .mockImplementationOnce(cb => cb(null, false)); + +myMockFn((err, val) => console.log(val)); +// > true + +myMockFn((err, val) => console.log(val)); +// > false +``` + +When the mocked function runs out of implementations defined with +`mockImplementationOnce`, it will execute the default implementation set with +`jest.fn` (if it is defined): + +```javascript +const myMockFn = jest + .fn(() => 'default') + .mockImplementationOnce(() => 'first call') + .mockImplementationOnce(() => 'second call'); + +console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); +// > 'first call', 'second call', 'default', 'default' +``` + +For cases where we have methods that are typically chained (and thus always need +to return `this`), we have a sugary API to simplify this in the form of a +`.mockReturnThis()` function that also sits on all mocks: + +```javascript +const myObj = { + myMethod: jest.fn().mockReturnThis(), +}; + +// is the same as + +const otherObj = { + myMethod: jest.fn(function() { + return this; + }), +}; +``` + +## Mock Names + +##### available in Jest **22.0.0+** + +You can optionally provide a name for your mock functions, which will be +displayed instead of "jest.fn()" in test error output. Use this if you want to +be able to quickly identify the mock function reporting an error in your test +output. + +```javascript +const myMockFn = jest + .fn() + .mockReturnValue('default') + .mockImplementation(scalar => 42 + scalar) + .mockName('add42'); +``` + +## Custom Matchers + +Finally, in order to make it simpler to assert how mock functions have been +called, we've added some custom matcher functions for you: + +```javascript +// The mock function was called at least once +expect(mockFunc).toBeCalled(); + +// The mock function was called at least once with the specified args +expect(mockFunc).toBeCalledWith(arg1, arg2); + +// The last call to the mock function was called with the specified args +expect(mockFunc).lastCalledWith(arg1, arg2); + +// All calls and the name of the mock is written as a snapshot +expect(mockFunc).toMatchSnapshot(); +``` + +These matchers are really just sugar for common forms of inspecting the `.mock` +property. You can always do this manually yourself if that's more to your taste +or if you need to do something more specific: + +```javascript +// The mock function was called at least once +expect(mockFunc.mock.calls.length).toBeGreaterThan(0); + +// The mock function was called at least once with the specified args +expect(mockFunc.mock.calls).toContain([arg1, arg2]); + +// The last call to the mock function was called with the specified args +expect(mockFunc.mock.calls[mockFunc.mock.calls.length - 1]).toEqual([ + arg1, + arg2, +]); + +// The first arg of the last call to the mock function was `42` +// (note that there is no sugar helper for this specific of an assertion) +expect(mockFunc.mock.calls[mockFunc.mock.calls.length - 1][0]).toBe(42); + +// A snapshot will check that a mock was invoked the same number of times, +// in the same order, with the same arguments. It will also assert on the name. +expect(mockFunc.mock.calls).toEqual([[arg1, arg2]]); +expect(mockFunc.mock.getMockName()).toBe('a mock name'); +``` + +For a complete list of matchers, check out the [reference docs](ExpectAPI.md). diff --git a/website/versioned_docs/version-22.0/MoreResources.md b/website/versioned_docs/version-22.0/MoreResources.md new file mode 100644 index 000000000000..df85907a9e5e --- /dev/null +++ b/website/versioned_docs/version-22.0/MoreResources.md @@ -0,0 +1,41 @@ +--- +id: version-22.0-more-resources +title: More Resources +original_id: more-resources +--- + +By now you should have a good idea of how Jest can make it easy to test your +applications. If you're interested in learning more, here's some related stuff +you might want to check out. + +### Browse the docs + +* Learn about [Snapshot Testing](SnapshotTesting.md), + [Mock Functions](MockFunctions.md), and more in our in-depth guides. +* Migrate your existing tests to Jest by following our + [migration guide](MigrationGuide.md). +* Learn how to [configure Jest](Configuration.md). +* Look at the full [API Reference](GlobalAPI.md). +* [Troubleshoot](Troubleshooting.md) problems with Jest. + +### Learn by example + +You will find a number of example test cases in the +[`examples`](https://github.com/facebook/jest/tree/master/examples) folder on +GitHub. You can also learn from the excellent tests used by the +[React](https://github.com/facebook/react/tree/master/src/renderers/__tests__), +[Relay](https://github.com/facebook/relay/tree/master/packages/react-relay/modern/__tests__), +and +[React Native](https://github.com/facebook/react-native/tree/master/Libraries/Animated/src/__tests__) +projects. + +### Join the community + +Ask questions and find answers from other Jest users like you. +[Reactiflux](http://www.reactiflux.com/) is a Discord chat where a lot of Jest +discussion happens. Check out the +[#jest](https://discordapp.com/channels/102860784329052160/103622435865104384) +channel. + +Follow the [Jest Twitter account](https://twitter.com/fbjest) and +[blog](/jest/blog/) to find out what's happening in the world of Jest. diff --git a/website/versioned_docs/version-22.0/Puppeteer.md b/website/versioned_docs/version-22.0/Puppeteer.md new file mode 100644 index 000000000000..89802f51bfb7 --- /dev/null +++ b/website/versioned_docs/version-22.0/Puppeteer.md @@ -0,0 +1,103 @@ +--- +id: version-22.0-puppeteer +title: Using with puppeteer +original_id: puppeteer +--- + +With the [Global Setup/Teardown](Configuration.md#globalsetup-string) and +[Async Test Environment](Configuration.md#testenvironment-string) APIs, Jest can +work smoothly with [puppeteer](https://github.com/GoogleChrome/puppeteer). + +## A jest-puppeteer example + +The basic idea is to: + +1. launch & file the websocket endpoint of puppeteer with Global Setup +2. connect to puppeteer from each Test Environment +3. close puppeteer with Global Teardown + +Here's an example of the GlobalSetup script + +```js +// setup.js +module.exports = async function() { + const browser = await puppeteer.launch(); + // store the browser instance so we can teardown it later + global.__BROWSER__ = browser; + + // file the wsEndpoint for TestEnvironments + mkdirp.sync(DIR); + fs.writeFileSync(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); +}; +``` + +Then we need a custom Test Environment for puppeteer + +```js +// puppeteer_environment.js +class PuppeteerEnvironment extends NodeEnvironment { + constructor(config) { + super(config); + } + + async setup() { + await super.setup(); + // get the wsEndpoint + const wsEndpoint = fs.readFileSync(path.join(DIR, 'wsEndpoint'), 'utf8'); + if (!wsEndpoint) { + throw new Error('wsEndpoint not found'); + } + + // connect to puppeteer + this.global.__BROWSER__ = await puppeteer.connect({ + browserWSEndpoint: wsEndpoint, + }); + } + + async teardown() { + await super.teardown(); + } + + runScript(script) { + return super.runScript(script); + } +} +``` + +Finally we can close the puppeteer instance and clean-up the file + +```js +// teardown.js +module.exports = async function() { + // close the browser instance + await global.__BROWSER__.close(); + + // clean-up the wsEndpoint file + rimraf.sync(DIR); +}; +``` + +With all the things set up, we can now write our tests like this: + +```js +// test.js +describe( + '/ (Home Page)', + () => { + let page; + beforeAll(async () => { + page = await global.__BROWSER__.newPage(); + await page.goto('https://google.com'); + }, timeout); + + it('should load without error', async () => { + const text = await page.evaluate(() => document.body.textContent); + expect(text).toContain('google'); + }); + }, + timeout, +); +``` + +Here's the code of +[full working example](https://github.com/xfumihiro/jest-puppeteer-example). diff --git a/website/versioned_docs/version-22.0/SetupAndTeardown.md b/website/versioned_docs/version-22.0/SetupAndTeardown.md new file mode 100644 index 000000000000..8bb3b1c17d74 --- /dev/null +++ b/website/versioned_docs/version-22.0/SetupAndTeardown.md @@ -0,0 +1,222 @@ +--- +id: version-22.0-setup-teardown +title: Setup and Teardown +original_id: setup-teardown +--- + +Often while writing tests you have some setup work that needs to happen before +tests run, and you have some finishing work that needs to happen after tests +run. Jest provides helper functions to handle this. + +### Repeating Setup For Many Tests + +If you have some work you need to do repeatedly for many tests, you can use +`beforeEach` and `afterEach`. + +For example, let's say that several tests interact with a database of cities. +You have a method `initializeCityDatabase()` that must be called before each of +these tests, and a method `clearCityDatabase()` that must be called after each +of these tests. You can do this with: + +```js +beforeEach(() => { + initializeCityDatabase(); +}); + +afterEach(() => { + clearCityDatabase(); +}); + +test('city database has Vienna', () => { + expect(isCity('Vienna')).toBeTruthy(); +}); + +test('city database has San Juan', () => { + expect(isCity('San Juan')).toBeTruthy(); +}); +``` + +`beforeEach` and `afterEach` can handle asynchronous code in the same ways that +[tests can handle asynchronous code](TestingAsyncCode.md) - they can either take +a `done` parameter or return a promise. For example, if +`initializeCityDatabase()` returned a promise that resolved when the database +was initialized, we would want to return that promise: + +```js +beforeEach(() => { + return initializeCityDatabase(); +}); +``` + +### One-Time Setup + +In some cases, you only need to do setup once, at the beginning of a file. This +can be especially bothersome when the setup is asynchronous, so you can't just +do it inline. Jest provides `beforeAll` and `afterAll` to handle this situation. + +For example, if both `initializeCityDatabase` and `clearCityDatabase` returned +promises, and the city database could be reused between tests, we could change +our test code to: + +```js +beforeAll(() => { + return initializeCityDatabase(); +}); + +afterAll(() => { + return clearCityDatabase(); +}); + +test('city database has Vienna', () => { + expect(isCity('Vienna')).toBeTruthy(); +}); + +test('city database has San Juan', () => { + expect(isCity('San Juan')).toBeTruthy(); +}); +``` + +### Scoping + +By default, the `before` and `after` blocks apply to every test in a file. You +can also group tests together using a `describe` block. When they are inside a +`describe` block, the `before` and `after` blocks only apply to the tests within +that `describe` block. + +For example, let's say we had not just a city database, but also a food +database. We could do different setup for different tests: + +```js +// Applies to all tests in this file +beforeEach(() => { + return initializeCityDatabase(); +}); + +test('city database has Vienna', () => { + expect(isCity('Vienna')).toBeTruthy(); +}); + +test('city database has San Juan', () => { + expect(isCity('San Juan')).toBeTruthy(); +}); + +describe('matching cities to foods', () => { + // Applies only to tests in this describe block + beforeEach(() => { + return initializeFoodDatabase(); + }); + + test('Vienna <3 sausage', () => { + expect(isValidCityFoodPair('Vienna', 'Wiener Schnitzel')).toBe(true); + }); + + test('San Juan <3 plantains', () => { + expect(isValidCityFoodPair('San Juan', 'Mofongo')).toBe(true); + }); +}); +``` + +Note that the top-level `beforeEach` is executed before the `beforeEach` inside +the `describe` block. It may help to illustrate the order of execution of all +hooks. + +```js +beforeAll(() => console.log('1 - beforeAll')); +afterAll(() => console.log('1 - afterAll')); +beforeEach(() => console.log('1 - beforeEach')); +afterEach(() => console.log('1 - afterEach')); +test('', () => console.log('1 - test')); +describe('Scoped / Nested block', () => { + beforeAll(() => console.log('2 - beforeAll')); + afterAll(() => console.log('2 - afterAll')); + beforeEach(() => console.log('2 - beforeEach')); + afterEach(() => console.log('2 - afterEach')); + test('', () => console.log('2 - test')); +}); + +// 1 - beforeAll +// 1 - beforeEach +// 1 - test +// 1 - afterEach +// 2 - beforeAll +// 1 - beforeEach +// 2 - beforeEach +// 2 - test +// 2 - afterEach +// 1 - afterEach +// 2 - afterAll +// 1 - afterAll +``` + +### Order of execution of describe and test blocks + +Jest executes all describe handlers in a test file _before_ it executes any of +the actual tests. This is another reason to do setup and teardown in `before*` +and `after*` handlers rather in the describe blocks. Once the describe blocks +are complete, by default Jest runs all the tests serially in the order they were +encountered in the collection phase, waiting for each to finish and be tidied up +before moving on. + +Consider the following illustrative test file and output: + +```js +describe('outer', () => { + console.log('describe outer-a'); + + describe('describe inner 1', () => { + console.log('describe inner 1'); + test('test 1', () => { + console.log('test for describe inner 1'); + expect(true).toEqual(true); + }); + }); + + console.log('describe outer-b'); + + test('test 1', () => { + console.log('test for describe outer'); + expect(true).toEqual(true); + }); + + describe('describe inner 2', () => { + console.log('describe inner 2'); + test('test for describe inner 2', () => { + console.log('test for describe inner 2'); + expect(false).toEqual(false); + }); + }); + + console.log('describe outer-c'); +}); + +// describe outer-a +// describe inner 1 +// describe outer-b +// describe inner 2 +// describe outer-c +// test for describe inner 1 +// test for describe outer +// test for describe inner 2 +``` + +### General Advice + +If a test is failing, one of the first things to check should be whether the +test is failing when it's the only test that runs. In Jest it's simple to run +only one test - just temporarily change that `test` command to a `test.only`: + +```js +test.only('this will be the only test that runs', () => { + expect(true).toBe(false); +}); + +test('this test will not run', () => { + expect('A').toBe('A'); +}); +``` + +If you have a test that often fails when it's run as part of a larger suite, but +doesn't fail when you run it alone, it's a good bet that something from a +different test is interfering with this one. You can often fix this by clearing +some shared state with `beforeEach`. If you're not sure whether some shared +state is being modified, you can also try a `beforeEach` that just logs data. diff --git a/website/versioned_docs/version-22.0/SnapshotTesting.md b/website/versioned_docs/version-22.0/SnapshotTesting.md new file mode 100644 index 000000000000..9bacb3cbc825 --- /dev/null +++ b/website/versioned_docs/version-22.0/SnapshotTesting.md @@ -0,0 +1,222 @@ +--- +id: version-22.0-snapshot-testing +title: Snapshot Testing +original_id: snapshot-testing +--- + +Snapshot tests are a very useful tool whenever you want to make sure your UI +does not change unexpectedly. + +A typical snapshot test case for a mobile app renders a UI component, takes a +screenshot, then compares it to a reference image stored alongside the test. The +test will fail if the two images do not match: either the change is unexpected, +or the screenshot needs to be updated to the new version of the UI component. + +## Snapshot Testing with Jest + +A similar approach can be taken when it comes to testing your React components. +Instead of rendering the graphical UI, which would require building the entire +app, you can use a test renderer to quickly generate a serializable value for +your React tree. Consider this +[example test](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/link.react.test.js) +for a simple +[Link component](https://github.com/facebook/jest/blob/master/examples/snapshot/Link.react.js): + +```javascript +import React from 'react'; +import Link from '../Link.react'; +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + const tree = renderer + .create(Facebook) + .toJSON(); + expect(tree).toMatchSnapshot(); +}); +``` + +The first time this test is run, Jest creates a +[snapshot file](https://github.com/facebook/jest/blob/master/examples/snapshot/__tests__/__snapshots__/link.react.test.js.snap) +that looks like this: + +```javascript +exports[`renders correctly 1`] = ` + + Facebook + +`; +``` + +The snapshot artifact should be committed alongside code changes, and reviewed +as part of your code review process. Jest uses +[pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) +to make snapshots human-readable during code review. On subsequent test runs +Jest will simply compare the rendered output with the previous snapshot. If they +match, the test will pass. If they don't match, either the test runner found a +bug in your code that should be fixed, or the implementation has changed and the +snapshot needs to be updated. + +More information on how snapshot testing works and why we built it can be found +on the +[release blog post](https://facebook.github.io/jest/blog/2016/07/27/jest-14.html). +We recommend reading +[this blog post](http://benmccormick.org/2016/09/19/testing-with-jest-snapshots-first-impressions/) +to get a good sense of when you should use snapshot testing. We also recommend +watching this +[egghead video](https://egghead.io/lessons/javascript-use-jest-s-snapshot-testing-feature?pl=testing-javascript-with-jest-a36c4074) +on Snapshot Testing with Jest. + +### Updating Snapshots + +It's straightforward to spot when a snapshot test fails after a bug has been +introduced. When that happens, go ahead and fix the issue and make sure your +snapshot tests are passing again. Now, let's talk about the case when a snapshot +test is failing due to an intentional implementation change. + +One such situation can arise if we intentionally change the address the Link +component in our example is pointing to. + +```javascript +// Updated test case with a Link to a different address +it('renders correctly', () => { + const tree = renderer + .create(Instagram) + .toJSON(); + expect(tree).toMatchSnapshot(); +}); +``` + +In that case, Jest will print this output: + +![](/jest/img/content/failedSnapshotTest.png) + +Since we just updated our component to point to a different address, it's +reasonable to expect changes in the snapshot for this component. Our snapshot +test case is failing because the snapshot for our updated component no longer +matches the snapshot artifact for this test case. + +To resolve this, we will need to update our snapshot artifacts. You can run Jest +with a flag that will tell it to re-generate snapshots: + +``` +jest --updateSnapshot +``` + +Go ahead and accept the changes by running the above command. You may also use +the equivalent single-character `-u` flag to re-generate snapshots if you +prefer. This will re-generate snapshot artifacts for all failing snapshot tests. +If we had any additional failing snapshot tests due to an unintentional bug, we +would need to fix the bug before re-generating snapshots to avoid recording +snapshots of the buggy behavior. + +If you'd like to limit which snapshot test cases get re-generated, you can pass +an additional `--testNamePattern` flag to re-record snapshots only for those +tests that match the pattern. + +You can try out this functionality by cloning the +[snapshot example](https://github.com/facebook/jest/tree/master/examples/snapshot), +modifying the `Link` component, and running Jest. + +### Tests Should Be Deterministic + +Your tests should be deterministic. That is, running the same tests multiple +times on a component that has not changed should produce the same results every +time. You're responsible for making sure your generated snapshots do not include +platform specific or other non-deterministic data. + +For example, if you have a +[Clock](https://github.com/facebook/jest/blob/master/examples/snapshot/Clock.react.js) +component that uses `Date.now()`, the snapshot generated from this component +will be different every time the test case is run. In this case we can +[mock the Date.now() method](MockFunctions.md) to return a consistent value +every time the test is run: + +``` +Date.now = jest.fn(() => 1482363367071); +``` + +Now, every time the snapshot test case runs, `Date.now()` will return +`1482363367071` consistently. This will result in the same snapshot being +generated for this component regardless of when the test is run. + +### Snapshots are not written automatically on Continuous Integration systems (CI) + +As of Jest 20, snapshots in Jest are not automatically written when Jest is run +in a CI system without explicitly passing `--updateSnapshot`. It is expected +that all snapshots are part of the code that is run on CI and since new +snapshots automatically pass, they should not pass a test run on a CI system. It +is recommended to always commit all snapshots and to keep them in version +control. + +## Frequently Asked Questions + +### Should snapshot files be committed? + +Yes, all snapshot files should be committed alongside the modules they are +covering and their tests. They should be considered as part of a test, similar +to the value of any other assertion in Jest. In fact, snapshots represent the +state of the source modules at any given point in time. In this way, when the +source modules are modified, Jest can tell what changed from the previous +version. It can also provide a lot of additional context during code review in +which reviewers can study your changes better. + +### Does snapshot testing only work with React components? + +[React](TutorialReacte.md) and [React Native](TutorialReactNative.md) components +are a good use case for snapshot testing. However, snapshots can capture any +serializable value and should be used anytime the goal is testing whether the +output is correct. The Jest repository contains many examples of testing the +output of Jest itself, the output of Jest's assertion library as well as log +messages from various parts of the Jest codebase. See an example of +[snapshotting CLI output](https://github.com/facebook/jest/blob/master/integration_tests/__tests__/console.test.js) +in the Jest repo. + +### What's the difference between snapshot testing and visual regression testing? + +Snapshot testing and visual regression testing are two distinct ways of testing +UIs, and they serve different purposes. Visual regression testing tools take +screenshots of web pages and compare the resulting images pixel by pixel. With +Snapshot testing values are serialized, stored within text files and compared +using a diff algorithm. There are different trade-offs to consider and we listed +the reasons why snapshot testing was built in the +[Jest blog](http://facebook.github.io/jest/blog/2016/07/27/jest-14.html#why-snapshot-testing). + +### Does snapshot testing substitute unit testing? + +Snapshot testing is only one of more than 20 assertions that ship with Jest. The +aim of snapshot testing is not to replace existing unit tests, but providing +additional value and making testing painless. In some scenarios, snapshot +testing can potentially remove the need for unit testing for a particular set of +functionalities (e.g. React components), but they can work together as well. + +### What is the performance of snapshot testing regarding speed and size of the generated files? + +Jest has been rewritten with performance in mind, and snapshot testing is not an +exception. Since snapshots are stored within text files, this way of testing is +fast and reliable. Jest generates a new file for each test file that invokes the +`toMatchSnapshot` matcher. The size of the snapshots is pretty small: For +reference, the size of all snapshot files in the Jest codebase itself is less +than 300 KB. + +### How do I resolve conflicts within snapshot files? + +Snapshot files must always represent the current state of the modules they are +covering. Therefore, if you are merging two branches and encounter a conflict in +the snapshot files, you can either resolve the conflict manually or to update +the snapshot file by running Jest and inspecting the result. + +### Is it possible to apply test-driven development principles with snapshot testing? + +Although it is possible to write snapshot files manually, that is usually not +approachable. Snapshots help figuring out whether the output of the modules +covered by tests is changed, rather than giving guidance to design the code in +the first place. + +### Does code coverage work with snapshots testing? + +Yes, just like with any other test. diff --git a/website/versioned_docs/version-22.0/TestingAsyncCode.md b/website/versioned_docs/version-22.0/TestingAsyncCode.md new file mode 100644 index 000000000000..3c8288ba8e2a --- /dev/null +++ b/website/versioned_docs/version-22.0/TestingAsyncCode.md @@ -0,0 +1,160 @@ +--- +id: version-22.0-asynchronous +title: Testing Asynchronous Code +original_id: asynchronous +--- + +It's common in JavaScript for code to run asynchronously. When you have code +that runs asynchronously, Jest needs to know when the code it is testing has +completed, before it can move on to another test. Jest has several ways to +handle this. + +### Callbacks + +The most common asynchronous pattern is callbacks. + +For example, let's say that you have a `fetchData(callback)` function that +fetches some data and calls `callback(data)` when it is complete. You want to +test that this returned data is just the string `'peanut butter'`. + +By default, Jest tests complete once they reach the end of their execution. That +means this test will _not_ work as intended: + +```js +// Don't do this! +test('the data is peanut butter', () => { + function callback(data) { + expect(data).toBe('peanut butter'); + } + + fetchData(callback); +}); +``` + +The problem is that the test will complete as soon as `fetchData` completes, +before ever calling the callback. + +There is an alternate form of `test` that fixes this. Instead of putting the +test in a function with an empty argument, use a single argument called `done`. +Jest will wait until the `done` callback is called before finishing the test. + +```js +test('the data is peanut butter', done => { + function callback(data) { + expect(data).toBe('peanut butter'); + done(); + } + + fetchData(callback); +}); +``` + +If `done()` is never called, the test will fail, which is what you want to +happen. + +### Promises + +If your code uses promises, there is a simpler way to handle asynchronous tests. +Just return a promise from your test, and Jest will wait for that promise to +resolve. If the promise is rejected, the test will automatically fail. + +For example, let's say that `fetchData`, instead of using a callback, returns a +promise that is supposed to resolve to the string `'peanut butter'`. We could +test it with: + +```js +test('the data is peanut butter', () => { + expect.assertions(1); + return fetchData().then(data => { + expect(data).toBe('peanut butter'); + }); +}); +``` + +Be sure to return the promise - if you omit this `return` statement, your test +will complete before `fetchData` completes. + +If you expect a promise to be rejected use the `.catch` method. Make sure to add +`expect.assertions` to verify that a certain number of assertions are called. +Otherwise a fulfilled promise would not fail the test. + +```js +test('the fetch fails with an error', () => { + expect.assertions(1); + return fetchData().catch(e => expect(e).toMatch('error')); +}); +``` + +### `.resolves` / `.rejects` + +##### available in Jest **20.0.0+** + +You can also use the `.resolves` matcher in your expect statement, and Jest will +wait for that promise to resolve. If the promise is rejected, the test will +automatically fail. + +```js +test('the data is peanut butter', () => { + expect.assertions(1); + return expect(fetchData()).resolves.toBe('peanut butter'); +}); +``` + +Be sure to return the assertion—if you omit this `return` statement, your test +will complete before `fetchData` completes. + +If you expect a promise to be rejected use the `.rejects` matcher. It works +analogically to the `.resolves` matcher. If the promise is fulfilled, the test +will automatically fail. + +```js +test('the fetch fails with an error', () => { + expect.assertions(1); + return expect(fetchData()).rejects.toMatch('error'); +}); +``` + +### Async/Await + +Alternatively, you can use `async` and `await` in your tests. To write an async +test, just use the `async` keyword in front of the function passed to `test`. +For example, the same `fetchData` scenario can be tested with: + +```js +test('the data is peanut butter', async () => { + expect.assertions(1); + const data = await fetchData(); + expect(data).toBe('peanut butter'); +}); + +test('the fetch fails with an error', async () => { + expect.assertions(1); + try { + await fetchData(); + } catch (e) { + expect(e).toMatch('error'); + } +}); +``` + +Of course, you can combine `async` and `await` with `.resolves` or `.rejects` +(available in Jest **20.0.0+**). + +```js +test('the data is peanut butter', async () => { + expect.assertions(1); + await expect(fetchData()).resolves.toBe('peanut butter'); +}); + +test('the fetch fails with an error', async () => { + expect.assertions(1); + await expect(fetchData()).rejects.toMatch('error'); +}); +``` + +In these cases, `async` and `await` are effectively just syntactic sugar for the +same logic as the promises example uses. + +None of these forms is particularly superior to the others, and you can mix and +match them across a codebase or even in a single file. It just depends on which +style makes your tests simpler. diff --git a/website/versioned_docs/version-22.0/TestingFrameworks.md b/website/versioned_docs/version-22.0/TestingFrameworks.md new file mode 100644 index 000000000000..9766001d3fb9 --- /dev/null +++ b/website/versioned_docs/version-22.0/TestingFrameworks.md @@ -0,0 +1,39 @@ +--- +id: version-22.0-testing-frameworks +title: Testing Web Frameworks +original_id: testing-frameworks +--- + +Although Jest may be considered a React-specific test runner, in fact it is a +universal testing platform, with the ability to adapt to any JavaScript library +or framework. In this section we'd like to link to community posts and articles +about integrating Jest into other popular JS libraries. + +## Vue.js + +* [Testing Vue.js components with Jest](https://alexjoverm.github.io/series/Unit-Testing-Vue-js-Components-with-the-Official-Vue-Testing-Tools-and-Jest/) + by Alex Jover Morales ([@alexjoverm](https://twitter.com/alexjoverm)) +* [Jest for all: Episode 1 — Vue.js](https://medium.com/@kentaromiura_the_js_guy/jest-for-all-episode-1-vue-js-d616bccbe186#.d573vrce2) + by Cristian Carlesso ([@kentaromiura](https://twitter.com/kentaromiura)) + +## AngularJS + +* [Testing an AngularJS app with Jest](https://medium.com/aya-experience/testing-an-angularjs-app-with-jest-3029a613251) + by Matthieu Lux ([@Swiip](https://twitter.com/Swiip)) +* [Running AngularJS Tests with Jest](https://engineering.talentpair.com/running-angularjs-tests-with-jest-49d0cc9c6d26) + by Ben Brandt ([@benjaminbrandt](https://twitter.com/benjaminbrandt)) + +## Angular + +* [Testing Angular faster with Jest](https://www.xfive.co/blog/testing-angular-faster-jest/) + by Michał Pierzchała ([@thymikee](https://twitter.com/thymikee)) + +## MobX + +* [How to Test React and MobX with Jest](https://semaphoreci.com/community/tutorials/how-to-test-react-and-mobx-with-jest) + by Will Stern ([@willsterndev](https://twitter.com/willsterndev)) + +## Redux + +* [Writing Tests](http://redux.js.org/docs/recipes/WritingTests.html) by Redux + docs diff --git a/website/versioned_docs/version-22.0/TimerMocks.md b/website/versioned_docs/version-22.0/TimerMocks.md new file mode 100644 index 000000000000..297772e740a5 --- /dev/null +++ b/website/versioned_docs/version-22.0/TimerMocks.md @@ -0,0 +1,182 @@ +--- +id: version-22.0-timer-mocks +title: Timer Mocks +original_id: timer-mocks +--- + +The native timer functions (i.e., `setTimeout`, `setInterval`, `clearTimeout`, +`clearInterval`) are less than ideal for a testing environment since they depend +on real time to elapse. Jest can swap out timers with functions that allow you +to control the passage of time. +[Great Scott!](https://www.youtube.com/watch?v=5gVv10J4nio) + +```javascript +// timerGame.js +'use strict'; + +function timerGame(callback) { + console.log('Ready....go!'); + setTimeout(() => { + console.log('Times up -- stop!'); + callback && callback(); + }, 1000); +} + +module.exports = timerGame; +``` + +```javascript +// __tests__/timerGame-test.js +'use strict'; + +jest.useFakeTimers(); + +test('waits 1 second before ending the game', () => { + const timerGame = require('../timerGame'); + timerGame(); + + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000); +}); +``` + +Here we enable fake timers by calling `jest.useFakeTimers();`. This mocks out +setTimeout and other timer functions with mock functions. + +## Run All Timers + +Another test we might want to write for this module is one that asserts that the +callback is called after 1 second. To do this, we're going to use Jest's timer +control APIs to fast-forward time right in the middle of the test: + +```javascript +test('calls the callback after 1 second', () => { + const timerGame = require('../timerGame'); + const callback = jest.fn(); + + timerGame(callback); + + // At this point in time, the callback should not have been called yet + expect(callback).not.toBeCalled(); + + // Fast-forward until all timers have been executed + jest.runAllTimers(); + + // Now our callback should have been called! + expect(callback).toBeCalled(); + expect(callback).toHaveBeenCalledTimes(1); +}); +``` + +## Run Pending Timers + +There are also scenarios where you might have a recursive timer -- that is a +timer that sets a new timer in its own callback. For these, running all the +timers would be an endless loop… so something like `jest.runAllTimers()` is not +desirable. For these cases you might use `jest.runOnlyPendingTimers()`: + +```javascript +// infiniteTimerGame.js +'use strict'; + +function infiniteTimerGame(callback) { + console.log('Ready....go!'); + + setTimeout(() => { + console.log('Times up! 10 seconds before the next game starts...'); + callback && callback(); + + // Schedule the next game in 10 seconds + setTimeout(() => { + infiniteTimerGame(callback); + }, 10000); + }, 1000); +} + +module.exports = infiniteTimerGame; +``` + +```javascript +// __tests__/infiniteTimerGame-test.js +'use strict'; + +jest.useFakeTimers(); + +describe('infiniteTimerGame', () => { + test('schedules a 10-second timer after 1 second', () => { + const infiniteTimerGame = require('../infiniteTimerGame'); + const callback = jest.fn(); + + infiniteTimerGame(callback); + + // At this point in time, there should have been a single call to + // setTimeout to schedule the end of the game in 1 second. + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000); + + // Fast forward and exhaust only currently pending timers + // (but not any new timers that get created during that process) + jest.runOnlyPendingTimers(); + + // At this point, our 1-second timer should have fired it's callback + expect(callback).toBeCalled(); + + // And it should have created a new timer to start the game over in + // 10 seconds + expect(setTimeout).toHaveBeenCalledTimes(2); + expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 10000); + }); +}); +``` + +## Advance Timers by Time + +##### renamed from `runTimersToTime` to `advanceTimersByTime` in Jest **22.0.0** + +Another possibility is use `jest.advanceTimersByTime(msToRun)`. When this API is +called, all timers are advanced by `msToRun` milliseconds. All pending +"macro-tasks" that have been queued via setTimeout() or setInterval(), and would +be executed during this timeframe, will be executed. Additionally if those +macro-tasks schedule new macro-tasks that would be executed within the same time +frame, those will be executed until there are no more macro-tasks remaining in +the queue that should be run within msToRun milliseconds. + +```javascript +// timerGame.js +'use strict'; + +function timerGame(callback) { + console.log('Ready....go!'); + setTimeout(() => { + console.log('Times up -- stop!'); + callback && callback(); + }, 1000); +} + +module.exports = timerGame; +``` + +```javascript +it('calls the callback after 1 second via advanceTimersByTime', () => { + const timerGame = require('../timerGame'); + const callback = jest.fn(); + + timerGame(callback); + + // At this point in time, the callback should not have been called yet + expect(callback).not.toBeCalled(); + + // Fast-forward until all timers have been executed + jest.advanceTimersByTime(1000); + + // Now our callback should have been called! + expect(callback).toBeCalled(); + expect(callback).toHaveBeenCalledTimes(1); +}); +``` + +Lastly, it may occasionally be useful in some tests to be able to clear all of +the pending timers. For this, we have `jest.clearAllTimers()`. + +The code for this example is available at +[examples/timer](https://github.com/facebook/jest/tree/master/examples/timer). diff --git a/website/versioned_docs/version-22.0/Troubleshooting.md b/website/versioned_docs/version-22.0/Troubleshooting.md new file mode 100644 index 000000000000..ac74b963ffcc --- /dev/null +++ b/website/versioned_docs/version-22.0/Troubleshooting.md @@ -0,0 +1,317 @@ +--- +id: version-22.0-troubleshooting +title: Troubleshooting +original_id: troubleshooting +--- + +Uh oh, something went wrong? Use this guide to resolve issues with Jest. + +### Tests are Failing and You Don't Know Why + +Try using the debugging support built into Node. + +Place a `debugger;` statement in any of your tests, and then, in your project's +directory, run: + +``` +node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here] +or on Windows +node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here] +``` + +This will run Jest in a Node process that an external debugger can connect to. +Note that the process will pause until the debugger has connected to it. + +To debug in Google Chrome (or any Chromium-based browser), simply open your +browser and go to `chrome://inspect` and click on "Open Dedicated DevTools for +Node", which will give you a list of available node instances you can connect +to. Simply click on the address displayed in the terminal (usually something +like `localhost:9229`) after running the above command, and you will be able to +debug Jest using Chrome's DevTools. + +The Chrome Developer Tools will be displayed, and a breakpoint will be set at +the first line of the Jest CLI script (this is done simply to give you time to +open the developer tools and to prevent Jest from executing before you have time +to do so). Click the button that looks like a "play" button in the upper right +hand side of the screen to continue execution. When Jest executes the test that +contains the `debugger` statement, execution will pause and you can examine the +current scope and call stack. + +> Note: the `--runInBand` cli option makes sure Jest runs test in the same +> process rather than spawning processes for individual tests. Normally Jest +> parallelizes test runs across processes but it is hard to debug many processes +> at the same time. + +### Debugging in VS Code + +There are multiple ways to debug Jest tests with +[Visual Studio Code's](https://code.visualstudio.com) built in +[debugger](https://code.visualstudio.com/docs/nodejs/nodejs-debugging). + +To attach the built-in debugger, run your tests as aforementioned: + +``` +node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here] +or on Windows +node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here] +``` + +Then attach VS Code's debugger using the following `launch.json` config: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "attach", + "name": "Attach", + "port": 9229 + } + ] +} +``` + +To automatically launch and attach to a process running your tests, use the +following configuration: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Jest Tests", + "type": "node", + "request": "launch", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/jest", + "--runInBand" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + } + ] +} +``` + +or the following for Windows: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Jest Tests", + "type": "node", + "request": "launch", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/jest/bin/jest.js", + "--runInBand" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + } + ] +} +``` + +If you are using Facebook's +[`create-react-app`](https://github.com/facebookincubator/create-react-app), you +can debug your Jest tests with the following configuration: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug CRA Tests", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/react-scripts", + "args": ["test", "--runInBand", "--no-cache", "--env=jsdom"], + "cwd": "${workspaceRoot}", + "protocol": "inspector", + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + } + ] +} +``` + +More information on Node debugging can be found +[here](https://nodejs.org/api/debugger.html). + +### Debugging in WebStorm + +The easiest way to debug Jest tests in +[WebStorm](https://www.jetbrains.com/webstorm/) is using +`Jest run/debug configuration`. It will launch tests and automatically attach +debugger. + +In the WebStorm menu `Run` select `Edit Configurations...`. Then click `+` and +select `Jest`. Optionally specify the Jest configuration file, additional +options, and environment variables. Save the configuration, put the breakpoints +in the code, then click the green debug icon to start debugging. + +If you are using Facebook's +[`create-react-app`](https://github.com/facebookincubator/create-react-app), in +the Jest run/debug configuration specify the path to the `react-scripts` package +in the Jest package field and add `--env=jsdom` to the Jest options field. + +### Caching Issues + +The transform script was changed or babel was updated and the changes aren't +being recognized by Jest? + +Retry with [`--no-cache`](CLI.md#cache). Jest caches transformed module files to +speed up test execution. If you are using your own custom transformer, consider +adding a `getCacheKey` function to it: +[getCacheKey in Relay](https://github.com/facebook/relay/blob/58cf36c73769690f0bbf90562707eadb062b029d/scripts/jest/preprocessor.js#L56-L61). + +### Unresolved Promises + +If a promise doesn't resolve at all, this error might be thrown: + +``` +- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` +``` + +Most commonly this is being caused by conflicting Promise implementations. +Consider replacing the global promise implementation with your own, for example +`global.Promise = require.requireActual('promise');` and/or consolidate the used +Promise libraries to a single one. + +If your test is long running, you may want to consider to increase the timeout +by calling `jest.setTimeout` + +``` +jest.setTimeout(10000); // 10 second timeout +``` + +### Watchman Issues + +Try running Jest with [`--no-watchman`](CLI.md#watchman) or set the `watchman` +configuration option to `false`. + +Also see +[watchman troubleshooting](https://facebook.github.io/watchman/docs/troubleshooting.html). + +### Tests are Extremely Slow on Docker and/or Continuous Integration (CI) server. + +While Jest is most of the time extremely fast on modern multi-core computers +with fast SSDs, it may be slow on certain setups as our users +[have](https://github.com/facebook/jest/issues/1395) +[discovered](https://github.com/facebook/jest/issues/1524#issuecomment-260246008). + +Based on the +[findings](https://github.com/facebook/jest/issues/1524#issuecomment-262366820), +one way to mitigate this issue and improve the speed by up to 50% is to run +tests sequentially. + +In order to do this you can run tests in the same thread using +[`--runInBand`](CLI.md#runinband): + +```bash +# Using Jest CLI +jest --runInBand + +# Using npm test (e.g. with create-react-app) +npm test -- --runInBand +``` + +Another alternative to expediting test execution time on Continuous Integration +Servers such as Travis-CI is to set the max worker pool to ~_4_. Specifically on +Travis-CI, this can reduce test execution time in half. Note: The Travis CI +_free_ plan available for open source projects only includes 2 CPU cores. + +```bash +# Using Jest CLI +jest --maxWorkers=4 + +# Using npm test (e.g. with create-react-app) +npm test -- --maxWorkers=4 +``` + +### Tests are slow when leveraging automocking + +Whether via [`automock: true`](configuration.html#automock-boolean) in config or +lots of +[`jest.mock('my-module')`](jest-object.html#jestmockmodulename-factory-options) +calls in tests, automocking has a performance cost that can add up in large +projects. The more dependencies a module has, the more work Jest has to do to +mock it. Something that can offset this performance cost significantly is adding +a code transformer that moves `import` or `require` calls from the top of a +module, where they are always executed, down into the body of the module, where +they are usually not executed. This can lower the number of modules Jest has to +load when running your tests by a considerable amount. + +To transform `import` statements, there is +[babel-plugin-transform-inline-imports-commonjs](https://github.com/zertosh/babel-plugin-transform-inline-imports-commonjs), +and to transform `require` statements, there is +[Facebook's `inline-requires` babel plugin](https://github.com/facebook/fbjs/blob/master/packages/babel-preset-fbjs/plugins/inline-requires.js), +which is part of the `babel-preset-fbjs` package. + +### I'm using npm3 and my node_modules aren't properly loading. + +Upgrade `jest-cli` to `0.9.0` or above. + +### I'm using babel and my unmocked imports aren't working? + +Upgrade `jest-cli` to `0.9.0` or above. + +Explanation: + +```js +jest.dontMock('foo'); + +import foo from './foo'; +``` + +In ES6, import statements get hoisted before all other + +```js +const foo = require('foo'); +jest.dontMock('foo'); // Oops! +``` + +In Jest 0.9.0, a new API `jest.unmock` was introduced. Together with a plugin +for babel, this will now work properly when using `babel-jest`: + +```js +jest.unmock('./foo'); // Use unmock! + +import foo from './foo'; + +// foo is not mocked! +``` + +See the [Getting Started]GettingStarted.md#using-babel) guide on how to enable +babel support. + +### I upgraded to Jest 0.9.0 and my tests are now failing? + +Jest is now using Jasmine 2 by default. It should be easy to upgrade using the +Jasmine [upgrade guide](http://jasmine.github.io/2.0/introduction.html). + +If you would like to continue using Jasmine 1, set the `testRunner` config +option to `jasmine1` or pass `--testRunner=jasmine1` as a command line option. + +### Compatibility issues + +Jest takes advantage of new features added to Node 4. We recommend that you +upgrade to the latest stable release of Node. The minimum supported version is +`v4.0.0`. Versions `0.x.x` are not supported. + +### `coveragePathIgnorePatterns` seems to not have any effect. + +Make sure you are not using the `babel-plugin-istanbul` plugin. Jest wraps +Istanbul, and therefore also tells Istanbul what files to instrument with +coverage collection. When using `babel-plugin-istanbul`, every file that is +processed by Babel will have coverage collection code, hence it is not being +ignored by `coveragePathIgnorePatterns`. + +### Still unresolved? + +See [Help](/jest/help.html). diff --git a/website/versioned_docs/version-22.0/TutorialAsync.md b/website/versioned_docs/version-22.0/TutorialAsync.md new file mode 100644 index 000000000000..19355a5cb90c --- /dev/null +++ b/website/versioned_docs/version-22.0/TutorialAsync.md @@ -0,0 +1,190 @@ +--- +id: version-22.0-tutorial-async +title: An Async Example +original_id: tutorial-async +--- + +First, enable Babel support in Jest as documented in the +[Getting Started](GettingStarted.md#using-babel) guide. + +Let's implement a simple module that fetches user data from an API and returns +the user name. + +```js +// user.js +import request from './request'; + +export function getUserName(userID) { + return request('/users/' + userID).then(user => user.name); +} +``` + +In the above implementation we expect the `request.js` module to return a +promise. We chain a call to `then` to receive the user name. + +Now imagine an implementation of `request.js` that goes to the network and +fetches some user data: + +```js +// request.js +const http = require('http'); + +export default function request(url) { + return new Promise(resolve => { + // This is an example of an http request, for example to fetch + // user data from an API. + // This module is being mocked in __mocks__/request.js + http.get({path: url}, response => { + let data = ''; + response.on('data', _data => (data += _data)); + response.on('end', () => resolve(data)); + }); + }); +} +``` + +Because we don't want to go to the network in our test, we are going to create a +manual mock for our `request.js` module in the `__mocks__` folder (the folder is +case-sensitive, `__MOCKS__` will not work). It could look something like this: + +```js +// __mocks__/request.js +const users = { + 4: {name: 'Mark'}, + 5: {name: 'Paul'}, +}; + +export default function request(url) { + return new Promise((resolve, reject) => { + const userID = parseInt(url.substr('/users/'.length), 10); + process.nextTick( + () => + users[userID] + ? resolve(users[userID]) + : reject({ + error: 'User with ' + userID + ' not found.', + }), + ); + }); +} +``` + +Now let's write a test for our async functionality. + +```js +// __tests__/user-test.js +jest.mock('../request'); + +import * as user from '../user'; + +// The assertion for a promise must be returned. +it('works with promises', () => { + expect.assertions(1); + return user.getUserName(4).then(data => expect(data).toEqual('Mark')); +}); +``` + +We call `jest.mock('../request')` to tell Jest to use our manual mock. `it` +expects the return value to be a Promise that is going to be resolved. You can +chain as many Promises as you like and call `expect` at any time, as long as you +return a Promise at the end. + +### `.resolves` + +##### available in Jest **20.0.0+** + +There is a less verbose way using `resolves` to unwrap the value of a fulfilled +promise together with any other matcher. If the promise is rejected, the +assertion will fail. + +```js +it('works with resolves', () => { + expect.assertions(1); + return expect(user.getUserName(5)).resolves.toEqual('Paul'); +}); +``` + +### `async`/`await` + +Writing tests using the `async`/`await` syntax is easy. Here is how you'd write +the same examples from before: + +```js +// async/await can be used. +it('works with async/await', async () => { + expect.assertions(1); + const data = await user.getUserName(4); + expect(data).toEqual('Mark'); +}); + +// async/await can also be used with `.resolves`. +it('works with async/await and resolves', async () => { + expect.assertions(1); + await expect(user.getUserName(5)).resolves.toEqual('Paul'); +}); +``` + +To enable async/await in your project, install +[`babel-preset-env`](http://babeljs.io/docs/plugins/preset-env/) and enable the +feature in your `.babelrc` file. + +### Error handling + +Errors can be handled using the `.catch` method. Make sure to add +`expect.assertions` to verify that a certain number of assertions are called. +Otherwise a fulfilled promise would not fail the test: + +```js +// Testing for async errors using Promise.catch. +test('tests error with promises', async () => { + expect.assertions(1); + return user.getUserName(2).catch(e => + expect(e).toEqual({ + error: 'User with 2 not found.', + }), + ); +}); + +// Or using async/await. +it('tests error with async/await', async () => { + expect.assertions(1); + try { + await user.getUserName(1); + } catch (e) { + expect(e).toEqual({ + error: 'User with 1 not found.', + }); + } +}); +``` + +### `.rejects` + +##### available in Jest **20.0.0+** + +The`.rejects` helper works like the `.resolves` helper. If the promise is +fulfilled, the test will automatically fail. + +```js +// Testing for async errors using `.rejects`. +it('tests error with rejects', () => { + expect.assertions(1); + return expect(user.getUserName(3)).rejects.toEqual({ + error: 'User with 3 not found.', + }); +}); + +// Or using async/await with `.rejects`. +it('tests error with async/await and rejects', async () => { + expect.assertions(1); + await expect(user.getUserName(3)).rejects.toEqual({ + error: 'User with 3 not found.', + }); +}); +``` + +The code for this example is available at +[examples/async](https://github.com/facebook/jest/tree/master/examples/async). + +If you'd like to test timers, like `setTimeout`, take a look at the +[Timer mocks](TimerMocks.md) documentation. diff --git a/website/versioned_docs/version-22.0/TutorialReact.md b/website/versioned_docs/version-22.0/TutorialReact.md new file mode 100644 index 000000000000..e27edbf2d010 --- /dev/null +++ b/website/versioned_docs/version-22.0/TutorialReact.md @@ -0,0 +1,302 @@ +--- +id: version-22.0-tutorial-react +title: Testing React Apps +original_id: tutorial-react +--- + +At Facebook, we use Jest to test [React](http://facebook.github.io/react/) +applications. + +## Setup + +### Setup with Create React App + +If you are just getting started with React, we recommend using +[Create React App](https://github.com/facebookincubator/create-react-app). It is +ready to use and +[ships with Jest](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#running-tests)! +You don't need to do any extra steps for setup, and can head straight to the +next section. + +### Setup without Create React App + +If you have an existing application you'll need to install a few packages to +make everything work well together. We are using the `babel-jest` package and +the `react` babel preset to transform our code inside of the test environment. +Also see [using babel](GettingStarted.md#using-babel). + +Run + +```bash +npm install --save-dev jest babel-jest babel-preset-es2015 babel-preset-react react-test-renderer +``` + +Your `package.json` should look something like this (where `` +is the actual latest version number for the package). Please add the scripts and +jest configuration entries: + +```json +// package.json + "dependencies": { + "react": "", + "react-dom": "" + }, + "devDependencies": { + "babel-jest": "", + "babel-preset-es2015": "", + "babel-preset-react": "", + "jest": "", + "react-test-renderer": "" + }, + "scripts": { + "test": "jest" + } +``` + +```json +// .babelrc +{ + "presets": ["es2015", "react"] +} +``` + +**And you're good to go!** + +### Snapshot Testing + +Let's create a [snapshot test](SnapshotTesting.md) for a Link component that +renders hyperlinks: + +```javascript +// Link.react.js +import React from 'react'; + +const STATUS = { + HOVERED: 'hovered', + NORMAL: 'normal', +}; + +export default class Link extends React.Component { + constructor(props) { + super(props); + + this._onMouseEnter = this._onMouseEnter.bind(this); + this._onMouseLeave = this._onMouseLeave.bind(this); + + this.state = { + class: STATUS.NORMAL, + }; + } + + _onMouseEnter() { + this.setState({class: STATUS.HOVERED}); + } + + _onMouseLeave() { + this.setState({class: STATUS.NORMAL}); + } + + render() { + return ( + + {this.props.children} + + ); + } +} +``` + +Now let's use React's test renderer and Jest's snapshot feature to interact with +the component and capture the rendered output and create a snapshot file: + +```javascript +// Link.react.test.js +import React from 'react'; +import Link from '../Link.react'; +import renderer from 'react-test-renderer'; + +test('Link changes the class when hovered', () => { + const component = renderer.create( + Facebook, + ); + let tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + + // manually trigger the callback + tree.props.onMouseEnter(); + // re-rendering + tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + + // manually trigger the callback + tree.props.onMouseLeave(); + // re-rendering + tree = component.toJSON(); + expect(tree).toMatchSnapshot(); +}); +``` + +When you run `npm test` or `jest`, this will produce an output file like this: + +```javascript +// __tests__/__snapshots__/Link.react.test.js.snap +exports[`Link changes the class when hovered 1`] = ` + + Facebook + +`; + +exports[`Link changes the class when hovered 2`] = ` + + Facebook + +`; + +exports[`Link changes the class when hovered 3`] = ` + + Facebook + +`; +``` + +The next time you run the tests, the rendered output will be compared to the +previously created snapshot. The snapshot should be committed along code +changes. When a snapshot test fails, you need to inspect whether it is an +intended or unintended change. If the change is expected you can invoke Jest +with `jest -u` to overwrite the existing snapshot. + +The code for this example is available at +[examples/snapshot](https://github.com/facebook/jest/tree/master/examples/snapshot). + +### DOM Testing + +If you'd like to assert, and manipulate your rendered components you can use +[Enzyme](http://airbnb.io/enzyme/) or React's +[TestUtils](http://facebook.github.io/react/docs/test-utils.html). We use Enzyme +for this example. + +You have to run `npm install --save-dev enzyme` to use Enzyme. If you are using +a React below version 15.5.0, you will also need to install +`react-addons-test-utils`. + +Let's implement a simple checkbox which swaps between two labels: + +```javascript +// CheckboxWithLabel.js + +import React from 'react'; + +export default class CheckboxWithLabel extends React.Component { + constructor(props) { + super(props); + this.state = {isChecked: false}; + + // bind manually because React class components don't auto-bind + // http://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding + this.onChange = this.onChange.bind(this); + } + + onChange() { + this.setState({isChecked: !this.state.isChecked}); + } + + render() { + return ( + + ); + } +} +``` + +We use Enzyme's +[shallow renderer](http://airbnb.io/enzyme/docs/api/shallow.html) in this +example. + +```javascript +// __tests__/CheckboxWithLabel-test.js + +import React from 'react'; +import {shallow} from 'enzyme'; +import CheckboxWithLabel from '../CheckboxWithLabel'; + +test('CheckboxWithLabel changes the text after click', () => { + // Render a checkbox with label in the document + const checkbox = shallow(); + + expect(checkbox.text()).toEqual('Off'); + + checkbox.find('input').simulate('change'); + + expect(checkbox.text()).toEqual('On'); +}); +``` + +The code for this example is available at +[examples/enzyme](https://github.com/facebook/jest/tree/master/examples/enzyme). + +### Custom transformers + +If you need more advanced functionality, you can also build your own +transformer. Instead of using babel-jest, here is an example of using babel: + +```javascript +// custom-transformer.js +'use strict'; + +const babel = require('babel-core'); +const jestPreset = require('babel-preset-jest'); + +module.exports = { + process(src, filename) { + if (babel.util.canCompile(filename)) { + return babel.transform(src, { + filename, + presets: [jestPreset], + retainLines: true, + }).code; + } + return src; + }, +}; +``` + +Don't forget to install the `babel-core` and `babel-preset-jest` packages for +this example to work. + +To make this work with Jest you need to update your Jest configuration with +this: `"transform": {"\\.js$": "path/to/custom-transformer.js"}`. + +If you'd like to build a transformer with babel support, you can also use +babel-jest to compose one and pass in your custom configuration options: + +```javascript +const babelJest = require('babel-jest'); + +module.exports = babelJest.createTransformer({ + presets: ['my-custom-preset'], +}); +``` diff --git a/website/versioned_docs/version-22.0/TutorialReactNative.md b/website/versioned_docs/version-22.0/TutorialReactNative.md new file mode 100644 index 000000000000..256ccb74dd49 --- /dev/null +++ b/website/versioned_docs/version-22.0/TutorialReactNative.md @@ -0,0 +1,285 @@ +--- +id: version-22.0-tutorial-react-native +title: Testing React Native Apps +original_id: tutorial-react-native +--- + +At Facebook, we use Jest to test +[React Native](http://facebook.github.io/react-native/) applications. + +Get a deeper insight into testing a working React Native app example by reading +the following series: +[Part 1: Jest – Snapshot come into play](https://blog.callstack.io/unit-testing-react-native-with-the-new-jest-i-snapshots-come-into-play-68ba19b1b9fe#.12zbnbgwc) +and +[Part 2: Jest – Redux Snapshots for your Actions and Reducers](https://blog.callstack.io/unit-testing-react-native-with-the-new-jest-ii-redux-snapshots-for-your-actions-and-reducers-8559f6f8050b). + +## Setup + +Starting from react-native version 0.38, a Jest setup is included by default +when running `react-native init`. The following configuration should be +automatically added to your package.json file: + +```json +// package.json + "scripts": { + "test": "jest" + }, + "jest": { + "preset": "react-native" + } +``` + +_Note: If you are upgrading your react-native application and previously used +the `jest-react-native` preset, remove the dependency from your `package.json` +file and change the preset to `react-native` instead._ + +Simply run `npm test` to run tests with Jest. + +## Snapshot Test + +Let's create a [snapshot test](SnapshotTesting.md) for a small intro component +with a few views and text components and some styles: + +```javascript +// Intro.js +import React, {Component} from 'react'; +import {StyleSheet, Text, View} from 'react-native'; + +const styles = StyleSheet.create({ + container: { + alignItems: 'center', + backgroundColor: '#F5FCFF', + flex: 1, + justifyContent: 'center', + }, + instructions: { + color: '#333333', + marginBottom: 5, + textAlign: 'center', + }, + welcome: { + fontSize: 20, + margin: 10, + textAlign: 'center', + }, +}); + +export default class Intro extends Component { + render() { + return ( + + Welcome to React Native! + + This is a React Native snapshot test. + + + ); + } +} +``` + +Now let's use React's test renderer and Jest's snapshot feature to interact with +the component and capture the rendered output and create a snapshot file: + +```javascript +// __tests__/Intro-test.js +import 'react-native'; +import React from 'react'; +import Intro from '../Intro'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +test('renders correctly', () => { + const tree = renderer.create().toJSON(); + expect(tree).toMatchSnapshot(); +}); +``` + +When you run `npm test` or `jest`, this will produce an output file like this: + +```javascript +// __tests__/__snapshots__/Intro-test.js.snap +exports[`Intro renders correctly 1`] = ` + + + Welcome to React Native! + + + This is a React Native snapshot test. + + +`; +``` + +The next time you run the tests, the rendered output will be compared to the +previously created snapshot. The snapshot should be committed along code +changes. When a snapshot test fails, you need to inspect whether it is an +intended or unintended change. If the change is expected you can invoke Jest +with `jest -u` to overwrite the existing snapshot. + +The code for this example is available at +[examples/react-native](https://github.com/facebook/jest/tree/master/examples/react-native). + +## Preset configuration + +The preset sets up the environment and is very opinionated and based on what we +found to be useful at Facebook. All of the configuration options can be +overwritten just as they can be customized when no preset is used. + +### Environment + +`react-native` ships with a Jest preset, so the `jest.preset` field of your +`package.json` should point to `react-native`. The preset is a node environment +that mimics the environment of a React Native app. Because it doesn't load any +DOM or browser APIs, it greatly improves Jest's startup time. + +### transformIgnorePatterns customization + +The +[`transformIgnorePatterns`](configuration.html#transformignorepatterns-array-string) +option can be used to whitelist or blacklist files from being transformed with +babel. Many react-native npm modules unfortunately don't pre-compile their +source code before publishing. + +By default the jest-react-native preset only processes the project's own source +files and react-native. If you have npm dependencies that have to be transformed +you can customize this configuration option by whitelisting modules other than +react-native: + +```json +"transformIgnorePatterns": [ + "node_modules/(?!(react-native|my-project|react-native-button)/)" +] +``` + +### setupFiles + +If you'd like to provide additional configuration for every test file, the +[`setupFiles` configuration option](configuration.html#setupfiles-array) can be +used to specify setup scripts. + +### moduleNameMapper + +The +[`moduleNameMapper`](configuration.html#modulenamemapper-object-string-string) +can be used to map a module path to a different module. By default the preset +maps all images to an image stub module but if a module cannot be found this +configuration option can help: + +```json +"moduleNameMapper": { + "my-module.js": "/path/to/my-module.js" +} +``` + +## Tips + +### Mock native modules using jest.mock + +The Jest preset built into `react-native` comes with a few default mocks that +are applied on a react-native repository. However some react-native components +or third party components rely on native code to be rendered. In such cases, +Jest's manual mocking system can help to mock out the underlying implementation. + +For example, if your code depends on a third party native video component called +`react-native-video` you might want to stub it out with a manual mock like this: + +```js +jest.mock('react-native-video', () => 'Video'); +``` + +This will render the component as `