From dbdb41734a0e3d95a26ab5b5c40a94a6c253dd48 Mon Sep 17 00:00:00 2001 From: Jeff See Date: Mon, 8 Apr 2019 15:59:22 +1000 Subject: [PATCH] Emphasize 'mock' variable name exception in docs (#8182) --- docs/Es6ClassMocks.md | 13 ++++++++++++- .../versioned_docs/version-23.x/Es6ClassMocks.md | 13 ++++++++++++- .../versioned_docs/version-24.0/Es6ClassMocks.md | 13 ++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/Es6ClassMocks.md b/docs/Es6ClassMocks.md index a0b744eb5cdc..01556f330fed 100644 --- a/docs/Es6ClassMocks.md +++ b/docs/Es6ClassMocks.md @@ -145,7 +145,18 @@ jest.mock('./sound-player', () => { }); ``` -A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! +A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! For example, the following will throw an out-of-scope error due to the use of 'fake' instead of 'mock' in the variable declaration: + +```javascript +// Note: this will fail +import SoundPlayer from './sound-player'; +const fakePlaySoundFile = jest.fn(); +jest.mock('./sound-player', () => { + return jest.fn().mockImplementation(() => { + return {playSoundFile: fakePlaySoundFile}; + }); +}); +``` ### Replacing the mock using [`mockImplementation()`](MockFunctionAPI.md#mockfnmockimplementationfn) or [`mockImplementationOnce()`](MockFunctionAPI.md#mockfnmockimplementationoncefn) diff --git a/website/versioned_docs/version-23.x/Es6ClassMocks.md b/website/versioned_docs/version-23.x/Es6ClassMocks.md index 32a864d69195..94b0fc1550c7 100644 --- a/website/versioned_docs/version-23.x/Es6ClassMocks.md +++ b/website/versioned_docs/version-23.x/Es6ClassMocks.md @@ -146,7 +146,18 @@ jest.mock('./sound-player', () => { }); ``` -A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! +A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! For example, the following will throw an out-of-scope error due to the use of 'fake' instead of 'mock' in the variable declaration: + +```javascript +// Note: this will fail +import SoundPlayer from './sound-player'; +const fakePlaySoundFile = jest.fn(); +jest.mock('./sound-player', () => { + return jest.fn().mockImplementation(() => { + return {playSoundFile: fakePlaySoundFile}; + }); +}); +``` ### Replacing the mock using [`mockImplementation()`](MockFunctionAPI.md#mockfnmockimplementationfn) or [`mockImplementationOnce()`](MockFunctionAPI.md#mockfnmockimplementationoncefn) diff --git a/website/versioned_docs/version-24.0/Es6ClassMocks.md b/website/versioned_docs/version-24.0/Es6ClassMocks.md index 97e43754114f..0fb7dcbb9095 100644 --- a/website/versioned_docs/version-24.0/Es6ClassMocks.md +++ b/website/versioned_docs/version-24.0/Es6ClassMocks.md @@ -146,7 +146,18 @@ jest.mock('./sound-player', () => { }); ``` -A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! +A limitation with the factory parameter is that, since calls to `jest.mock()` are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the word 'mock'. It's up to you to guarantee that they will be initialized on time! For example, the following will throw an out-of-scope error due to the use of 'fake' instead of 'mock' in the variable declaration: + +```javascript +// Note: this will fail +import SoundPlayer from './sound-player'; +const fakePlaySoundFile = jest.fn(); +jest.mock('./sound-player', () => { + return jest.fn().mockImplementation(() => { + return {playSoundFile: fakePlaySoundFile}; + }); +}); +``` ### Replacing the mock using [`mockImplementation()`](MockFunctionAPI.md#mockfnmockimplementationfn) or [`mockImplementationOnce()`](MockFunctionAPI.md#mockfnmockimplementationoncefn)