æ©èœããªã¯ãšã¹ãããã°ãå ±åããŸããïŒ
ãã°
çŸåšã®åäœã¯äœã§ããïŒ
ãã¡ã¯ããªã䜿çšããŠã¢ãã¯ãäœæããæ¹æ³ã¯ã test
ãŸãã¯it
å
ã§ã¯æ©èœããªãããã§ãã ããã¯ãã¢ãã¯ããã¡ã€ã«ã®ã«ãŒãã¬ãã«ã§å®çŸ©ãããŠããå Žåã«ã®ã¿æ©èœããŸãã
ãããç§ã®ã¢ãã¯ã®äŸã§ãïŒ
jest.mock('services/feature', () => ({
isEnabled: () => true
}));
æåŸ ãããåäœã¯äœã§ããïŒ
ãã¹ãå ã§ãã¡ã€ã«ãã¢ãã¯ããããšã¯æ©èœããã¯ãã§ãã
æ£ç¢ºãªJestæ§æãæäŸããJestãããŒããyarn / npmããŒãžã§ã³ãããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã€ããŠèª¬æããŠãã ããã
Jest 18.0.0ãããŒã7.4ãmacOS
jest.mock
åŒã³åºãã¯ãbabel-jestå€æã䜿çšããŠãã¡ã€ã«ã®å
é ã«èªåçã«åŒãäžããããŸãã jest.doMock
䜿çšãããšããã®åäœãçç¥ã§ããŸãã ããªãã¯ãããè©ŠããŸãããïŒ
doMock
åãã§ãã
ããã¥ã¡ã³ãã§ã¯ãç§ã¯èªãããšãã§ããŸã
泚ïŒ
babel-jest
ã䜿çšããå Žåãã¢ãã¯ãžã®åŒã³åºãã¯èªåçã«ã³ãŒããããã¯ã®å é ã«åŒãäžããããŸãã ãã®åäœãæ瀺çã«åé¿ãããå Žåã¯ãdoMock
䜿çšããŠãã ããã
ããã...ãã¹ãã¯ã³ãŒããããã¯ã§ãããïŒ ã§ããããç§ã®å Žåãéãã¯èŠãããªããšæããŸãã
ãããå®å šãªãã¹ãã§ã
it('renders with the enabled feature', () => {
jest.mock('services/feature', () => ({
isEnabled: () => true
}));
const component = renderer.create(
<MyComponent />
);
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
GHãªããžããªã§ããã®åçŸãæäŸã§ããŸããïŒ
ãã¡ããã ããã«ãããŸãïŒ https ïŒ
ã©ã¡ãã®ãã¹ããã代ããã«ãæå¹ããã¬ã³ããªã³ã°ããã¢ãã¯ãæã£ãŠããŠãããç¡å¹ããã¬ã³ããªã³ã°ããŸãã
ããããåç
§ããŠãã ããïŒ
https://github.com/tleunen/jest-issue-2582/blob/master/src/MyComponent.js
https://github.com/tleunen/jest-issue-2582/blob/master/src/__tests__/MyComponent.spec.js
ããããšãã
ãã®åé¡ã«ã€ããŠ@ thymikee @ cpojerã«ã¢ããã€ã¹ã¯ãããŸããïŒ
åããã¡ã€ã«ã«ããã€ãã®ãã¹ãããããããããã«å¯ŸããŠç°ãªãã¢ãã¯å¿çãå¿
èŠã§ãã
ãã®åé¡ãèŠã€ããŠããããã§ãã jest.mock()
ãdescribe
ã¹ã³ãŒãã§æ©èœããªãã£ãçç±ã«é ãæ©ãŸããŠããŸããã ãããäžçªäžïŒãã¹ããã¡ã€ã«ã®ã€ã³ããŒãã®äžïŒã«ç§»åãããšãæ©èœããŸãã
ç§ã«ãšã£ãŠã¯ãã¢ãã¯ãã¡ã€ã«ãå«ã__mocks__
ãã©ã«ããŒã䜿çšããŠããã¡ã¯ããªãªãã§jest.mock()
ã«ãé©çšãããŸãã
- ç·šé
ã€ã³ããŒãã¹ããŒãã¡ã³ãã®åã«jest.mock()
ã¹ããŒãã¡ã³ããæã¡äžããå¿
èŠãããããšã¯æããã§ãã ãã ãã @ tleunenã®å Žåãããã¯ãããããåããã¡ã€ã«ãç°ãªãå¿çã§è€æ°åã¢ãã¯ããããšãã§ããªãããšãæå³ããŸãã ããããããã¡ã¯ããªé¢æ°ãããåçã«ããããšã§æåã®ãµãŒãã¹ãæäŸãããããããã¹ãã±ãŒã¹ããšã«ç°ãªãçµæãæäŸã§ããŸãã
ç§ã®èãã§ã¯ã jest.mock()
ãåžžã«describe
it
ãããã¯ãšããã¥ã¡ã³ãã«æ確ã«èšèŒãããŠããå¿
èŠããããŸã
ãããã£ãŠã jest.mock
ã¯é¢æ°ã¹ã³ãŒãã«åŒãäžããããŠããŸãããã®ãããã¢ãžã¥ãŒã«ã¹ã³ãŒãã«åŒãäžããããrequire
ã§ã¯æ©èœããŸããïŒã¢ãžã¥ãŒã«ã¹ã³ãŒãã«åŒãäžããããimport
ã§ã¯æ©èœããŸããïŒã describe
ïŒJasmineã«ãã£ãŠç¹å¥ã«æ±ãããïŒä»¥å€ã®é¢æ°å
ã§åŒã³åºããŸãã
jest.mock
åŒã³åºãã¯ããã®é¢æ°ïŒã¢ãžã¥ãŒã«ã§ã¯ãªãïŒã®å
é ã«åŒãäžããããŸãããã®ãããæåŸ
ã©ããã«æ©èœããŸããã
éåžžããã¹ãã±ãŒã¹éã§ç°ãªãã¢ãã¯ãå¿
èŠãªå Žåã¯ã beforeEach
ãšafterEach
ç°ãªãã¢ãã¯ãèšå®ããããšããå§ãããŸãã
@cpojerã¯ããã«ã€ããŠè©³çŽ°ã«èª¬æããããšãã§ããäžäœã¹ã³ãŒããžã®åŒã³åºããåŒãäžãããå Žåã¯ã
ããã¯ãã¢ãžã¥ãŒã«ã®åæåæã«ã¢ãžã¥ãŒã«ãå¿
èŠã«ãªãããã§ãïŒã€ã³ããŒãã䜿çšïŒã jest.mock
ã¯åŸã§åŒã³åºãããŸãã ããã解決ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
beforeEach(() => { // or the specific test
jest.mock('MyModule', () => âŠ);
const MyModule = require('MyModule');
âŠ
});
NSã
beforeEachã§ãããè¡ããšãããããã¹ããã©ã®ããã«åºå¥ãããã¯ããããŸããïŒã€ãŸãããã¹ãããšã«ç°ãªãã¢ãã¯ãã©ã®ããã«äžããã®ã§ããããïŒïŒ
ãã¡ãããããããã¹ãèªäœã®äžã«å ¥ããããšã¯æ©èœããŸãã
次ã«ããã¹ããããã³ã³ããŒãã³ãå ã«ã¢ãã¯ã¢ãžã¥ãŒã«ãæž¡ãããšãã§ããŸããïŒ
ã¢ãã¯ããããã¡ã€ã«ãã€ã³ããŒã/èŠæ±ããŠããªããïŒããšãã°ãã€ã³ããŒãããŠããä»ã®ãã¡ã€ã«ã®äŸåé¢ä¿ïŒããããdescribe / itãããã¯ã«ã¹ã³ãŒããããå Žåã¯ã©ããªããŸããïŒ ãŸãã¯ãbeforeEach / beforeAllãã¹ãã§å¥ã®ã¢ãã¯ãäœæãããå Žåã§ãïŒ ãããã®ã±ãŒã¹ã¯å¯èœã§ããïŒ
// A.js depends on B.js
import A from './A';
describe('myTest', () => {
describe('myFirstScope', () => {
beforeAll(() => {
jest.mock('./B', () => ({
myFirstMethod: jest.fn(),
}));
});
// tests here
});
describe('mySecondScope', () => {
beforeAll(() => {
jest.mock('./B', () => ({
mySecondMethod: jest.fn(),
}));
});
// tests here
});
});
ãã®å ŽåãBãã¢ãã¯ããåŸã«AãèŠæ±ããå¿
èŠããããŸãïŒ import
ã䜿çšããã require
ïŒã
Bãã¢ãã¯ããåŸã«Aãå¿ èŠ
ç§ã«ã¯ããŸããããŸããã§ããããBã®å ã®ã¢ãã¯ãçµæã«ãã¹ã¹ã«ãŒããã®ããŸã èŠãŠããŸãã
@GoldAnnaãã®åé¡ã®åé¿çãèŠã€ããŸãããïŒ
@alayorç§ã¯ããŠããŸãã
ãã®åé¡ã«äœåºŠãééããŸããããé©åã«ãã¹ãããŠããªãããäœæè
ãæå³ãããšããã«jest
ã䜿çšããŠããªããããŸãã¯äž¡æ¹ã®çµã¿åããã§ãããšç¢ºä¿¡ããŠããŸãã ãããªã蚌æ ã¯ã jest
ã®ããã¥ã¡ã³ãã«ããã¢ãã¯é¢é£ã®äŸã¯ãç§ã«ã¯å®éã®äŸã®ããã«ã¯èŠããªãããšã§ã...ãããã¯ããããããã§ãããç§ã®ã¢ãããŒãã¯ããããæ£ãããããŸããã
ããã¯èšã£ãŠãã次ã®ããšã¯ç§ã«ãšã£ãŠã¯ããŸãããã次ã®ãã¹ãŠã®ãã¹ãã«åæ ŒããŸãã ModuleB
ã®å
ã®ããŒãžã§ã³ã«æ»ãã«ã¯ã jest.resetModules()
ãšjest.unmock('./moduleB')
äž¡æ¹ãåŒã³åºãå¿
èŠãããããšã«æ³šæããŠãã ãã...ãããã®é åºã¯éèŠã§ã¯ãããŸããã
// Module A
const ModuleB = require('./moduleB');
const ModuleA = function() {
this.title = new ModuleB().title;
return this;
};
module.exports = ModuleA;
// Module B
const ModuleB = function() {
this.title = 'Module B - Original'
return this;
};
module.exports = ModuleB;
// Tests
describe('Jest a few tests', () => {
it('should do something', () => {
jest.resetModules();
jest.mock('./moduleB', () => function() {
this.title = 'Module B - Mock 1'
return this;
});
const ModuleA = require('./moduleA');
const moduleA = new ModuleA();
expect(moduleA.title).toEqual('Module B - Mock 1');
});
it('should do something else', () => {
jest.resetModules();
jest.mock('./moduleB', () => function() {
this.title = 'Module B - Mock 2'
return this;
});
const ModuleA = require('./moduleA');
const moduleA = new ModuleA();
expect(moduleA.title).toEqual('Module B - Mock 2');
});
it('should do something original', () => {
jest.resetModules();
jest.unmock('./moduleB');
const ModuleA = require('./moduleA');
const moduleA = new ModuleA();
expect(moduleA.title).toEqual('Module B - Original');
});
});
ããã
ããã§ã¯äœãããŸããããŸããã
誰ãããã®äžã§jest.mockã䜿çšã§ããªãçç±ã説æã§ããŸããïŒ
ããããšãããããŸãã
ããã¯ãŸã åé¡ã§ãããæ©èœãªã¯ãšã¹ããšããŠå床éãå¿ èŠããããšæããŸãã ãã¹ããåç¬ã§æžãããã ã¢ãã¯ãã©ã«ãã«ç©ããã³ãããããbeforeEachã§åé ç·ããããããšãéåžžãã¢ãã¯ã®ãžã£ã³ã¯ããã¯ãŒ/å¥åŠãªããŒã¿ã®ã€ã³ã¹ã¿ã³ã¹åãçºçãããã¹ãŠã®ãã¹ãã«æã¡èŸŒãŸããŸãã å°ããªã¢ãã¯ãæžããŠãå°ããªãã¹ããã¹ãäœãããã§ãã
åã
ã®ãã¹ããåé¢ããå®éã®æ¹æ³ã¯ãããŸããïŒ test.concurrent
èæ
®ïŒã tapãavaã«äŒŒãAPIãæ¡çšããã°å¯èœã§ãããçŸåšã®ã°ããŒãã«APIã«ããå¶çŽã§ã¯äžå¯èœã ãšæããŸãã ééã£ãŠããããšã蚌æãããŠãšãŠã幞ãã§ãïŒ
以åã«mochaãšproxyquireã§èšè¿°ããããã¹ãããªãã¡ã¯ã¿ãªã³ã°ããããã«ãããã§è€æ°ã®æ¹æ³ã«èŠåŽããŠããŸããããæçµçã«ã¯ãã¢ãã¯ããšã«ãã¹ããç°ãªããã¡ã€ã«ã«åå²ããããšã«ãªããŸããã
@gcoxã¢ãžã¥ãŒã«ã®ãããã¬ãã«ã§ã¢ãã¯ãäœæããŠïŒãã®åŸmoduleAãèŠæ±ããŠïŒãç°ãªãåäœãå¿ èŠãšãããã¹ãããšã«ã¢ãã¯ã®å®è£ ãå€æŽããŠã¿ãŸãããïŒ ãããè¡ãã«ã¯ã mockImplementationã䜿çšã§ããŸãã ãããããã¹ãã¹ã€ãŒãã§ããã解決ããæ¹æ³ã§ãã
@antgonzalesã¢ãžã¥ãŒã«ã®ã€ã³ããŒããã¢ãžã¥ãŒã«ã®åŒãäžããããŠããå Žåããããè¡ãã®ã¯é£ãããšæããŸãã 以åã«ã€ã³ããŒããããã¢ãžã¥ãŒã«ã®åç §ãå€æŽããããšã¯ãããŒãã§ã¯èªæã§ã¯ãªããäžå¯èœã«æããŸãã
@jkomusinééããªãã ããã¯OPãæ±ããŠãããã®ã§ã¯ãããŸãããIMOã å
·äœçã«ã¯ãã require('whatever')
ã«ãåããªããžã§ã¯ãã§ã¯ãªããé£æ¥ããè€æ°ã®ãã¹ãã§ç°ãªãã¢ãã¯ãè¿ãããã«åŒ·å¶ããã«
ãã¹ãéã§ã¢ãã¯ã®æ»ãå€ãå€æŽããã«ã¯ã次ã®ããã«ããŸãã
jest.mock('whatever');
// Get the mock function
const whatever = require('whatever');
test('test 1', () => {
whatever.mockImplementation(() => 'hello');
});
test('test 2', () => {
whatever.mockImplementation(() => 'world');
});
@gcoxã®åçã¯ç§ã«ãšã£ãŠã¯ããŸããããŸãããã ããããšãŠãç°¡åã§ãïŒ
@rafaeleyngã§ãããã¢ãžã¥ãŒã«ãããšã¯ã¹ããŒããããã®ãé¢æ°ã§ãªãå Žåã @ SimenBã¯æ©èœããŸãã...
@gcoxã®äŸã«ã¯ãéå»æ°æéã«ããã¥ã¡ã³ãã§æ€çŽ¢ããŠããã»ãšãã©ã®æ å ±ãå«ãŸããŠããŸãã ãšã«ããçŸæç¹ã§ã¯éåžžã«ãŸã°ããªå ¬åŒããã¥ã¡ã³ãã«å«ããããšããå§ãããŸãã
@schumanndã¯æ£ããã§ãã å ¬åŒææžãããæ確ã§é®®æã«ããŠãã ããã
PRã¯åžžã«ããã¥ã¡ã³ãã®æ¹åãæè¿ããŸãð
ã«åºã¥ãã¢ãžã¥ãŒã«äŸ
https://github.com/facebook/jest/issues/2582#issuecomment-378677440â€ïž
ããããªã³ã¯ãããåé¡ã§ãããèŠã€ããŠãç§ã¯ãããç解ããŸããïŒ
jest.mock('child_process')
const childProcess = require('child_process')
describe('foo', () => {
test('bar', () => {
childProcess.execSync.mockImplentation(jest.fn().mockReturnValueOnce('wibble'))
// code that itself requires child_process
expect(childProcess.execSync.mock.results[0]).toEqual('wibble')
})
test('baz', () => {
childProcess.execSync.mockImplentation(jest.fn().mockReturnValueOnce('wobble'))
// code that itself requires child_process
expect(childProcess.execSync.mock.results[0]).toEqual('wobble')
})
})
å¿ èŠãªã³ãŒãã§è€æ°ã®é¢æ°/ã¡ãœãããã¢ãã¯ããå¿ èŠãããå Žåã¯ãã°ããŒãã«ã«å®è¡ãããšãã«ãã¡ã¯ããªã䜿çšããã®ã§ã¯ãªããããããåå¥ã«èšå®ããå¿ èŠããããŸãã
ç§ã奜ããªãã1ã€ã®é¢æ°ã ããå¿ èŠãªå Žåã¯ããã¹ãŠãåçŽåã§ããŸãã
jest.mock('child_process')
const { execSync } = require('child_process')
describe('foo', () => {
test('bar', () => {
execSync.mockImplentation(jest.fn().mockReturnValueOnce('wibble'))
// code that itself requires child_process
expect(execSync.mock.results[0]).toEqual('wibble')
})
test('baz', () => {
execSync.mockImplentation(jest.fn().mockReturnValueOnce('wobble'))
// code that itself requires child_process
expect(execSync.mock.results[0]).toEqual('wobble')
})
})
jsonãã¡ã€ã«ãããããããå®æ°ãªã©ã®éé¢æ°åŸå±æ§ãã¢ãã¯ããã®ã¯ã©ãã§ããã ãããåŠçããæ¹æ³ã«ã€ããŠãããã¥ã¡ã³ããããæ確ã«ããŠãã ãã...
@gcoxãã¹ã察象ã®ã€ã³ããŒããããã¢ãžã¥ãŒã«ããæåã§ã¢ãã¯ãäœæããå¥ã®ã¢ãžã¥ãŒã«ã__mocks__
ãã©ã«ããŒã«ã€ã³ããŒããããšãã«ãç§ãèŠã€ãããœãªã¥ãŒã·ã§ã³ã¯ããã ãã§ãã
ããšãã°ããã¹ããã¡ã€ã«ã¯jest.mock('./ModuleA')
åŒã³åºããŸããããã¯ã __mocks__/ModuleA.js
ã¢ãã¯ããããŸãã ããããModuleAã¯ãã¹ãäžã§ã¯ãªããModuleBïŒModuleAãå¿
èŠãšããïŒããã¹ãäžã®ãã®ã§ãã ãœãªã¥ãŒã·ã§ã³ããªããã°ãModuleBã¯ã¢ãã¯ã§ã¯ãªãModuleAã®å®éã®å®è£
ãååŸããŸãã
ããã¯åè«ããã¯æ¬åœã«å¥åŠãªæ¯ãèãã®ããã§ãã ã¢ãžã¥ãŒã«ã§jest.mockãåŒã³åºããšãã¢ãã¯ãããã¢ãžã¥ãŒã«ã«äŸåãããã¹ã察象ã®ã¢ãžã¥ãŒã«ãã¢ãã¯ã䜿çšããããšãæåŸ ããŸãã ããããã®ããã«æ©èœããªãã®ã¯å¥åŠã«æããŸããããããšãç§ã¯ãããå®å šã«ééã£ãŠè¡ã£ãŠããŸããïŒ
@SimenBããªãã®äŸã§ã¯ãã¢ãã¯ãããã¢ãžã¥ãŒã«ãå¿ èŠã§ãããããããã¹ãã§å®è¡ããŠããŸããããã¯æ©èœããŸãã äžèšã®ã·ããªãªãæ©èœãããšæããŸããïŒ æ¬åœã«ããããšãã
@SimenBã¯ç§ã®ããã«ããªãã®ããç°¡åãªè§£æ±ºçãåããŸããã ããããšãïŒ ç§ãå€ãã®ç°ãªãæ¹æ³ã§æéãéããåã«ãé¡ãã¯ãããæ©ãèŠã€ããããšãã§ããŸãã
ç§ã®å Žåãã¹ã¿ããããã¢ãžã¥ãŒã«ãžã®ééã£ããã¹ãã¢ãã¯ããŠã€ã³ããŒãããŠããŸããã ãã¡ã€ã«ãã¹ã®å€§æåãšå°æåãç°ãªãããããšãã£ã¿ãŒã¯åé¡ãªããšæããŸãããã倱æããŠããŸããã
ã ã£ã
const { stubMethod } = require("./path/to/File");
jest.mock("./path/to/File");
ã«å€æŽïŒ File
ãfile
ïŒïŒ
const { stubMethod } = require("./path/to/file");
jest.mock("./path/to/file");
ãããä»ã®èª°ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãžã£ã¹ãã³spyOn()
ã¯ããã¹ãã®_å
éš_ã§ãã®ãããªåé¡ã¯ãããŸããã ãžã§ã¹ãã¯ããããããã©ã«ãã§ãžã£ã¹ãã³ã䜿çšããŠããŸããïŒ ãã¹ãå
ã§æ©èœããªãã®ã¯ãªãã§ããïŒ
ãžã£ã¹ãã³ã®äŸïŒ
spyOn(require('moduleB'), 'functionA').and.callFake(() => true);
ã¢ãžã¥ãŒã«ã®ã¢ãã¯ã«é¢ããŠç§ãããç解ããŠããªãã®ã¯ãã¢ãžã¥ãŒã«ãäž»ã«ãã¹ãæ©èœã§äœ¿çšãããããã«åžžã«èšè¿°ãããŠãããšããããšã§ãã ããšãã°ãããã¥ã¡ã³ãã®doMock
é¢æ°ã®ãµã³ãã«ã³ãŒããèŠããšã次ã®ããã«ãªããŸãã
test('moduleName 2', () => {
jest.doMock('../moduleName', () => {
return {
__esModule: true,
default: 'default2',
foo: 'foo2',
};
});
return import('../moduleName').then(moduleName => {
expect(moduleName.default).toEqual('default2');
expect(moduleName.foo).toEqual('foo2');
});
});
ãã®äŸã§ã¯ããã¹ãé¢æ°å
ã§ã®ã¿ãæ°ããã¢ãã¯ãããããŒãžã§ã³ã®"moduleName"
ã¢ã¯ã»ã¹ã§ããŸãã ç§ã«ãšã£ãŠã¯ããéãã¹ããã³ãŒããã¢ãã¯ããŒãžã§ã³ã®ã¢ãžã¥ãŒã«ã«ãã¢ã¯ã»ã¹ã§ããããšãã¯ããã«éèŠã§ãã ããšãã°ããã¹ãå
ã§äœ¿çšããŠããã "moduleName"
ãã€ã³ããŒãããã¯ã©ã¹ã¯ãã¢ãã¯ãããããŒãžã§ã³ã§ã¯ãªããå
ã®ããŒãžã§ã³ãåŒãç¶ã䜿çšããŸãã
é¢é£ããŠããããã§ãïŒ https ïŒ
ãã³ã-ããªããã£ãå€ããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ãããå ŽåãäŸïŒ
`` `auth.js
export const isUserAdmin = getSettingïŒ 'admin'ïŒ;
And you want to use a mock value instead, in the test, then a simple require and assignment seems to do the trick:
```deleteUser.js
const auth = require('../auth');
describe('deleteUser', () => {
it('can delete if admin', () => {
auth.isUserAdmin = true;
// call method that depends on isUserAdmin value
// and assert on the result
});
});
ãããã£ãŠãåºæ¬çã«ãã³ãŒãã«ãã£ãŠéæ¥çã«äœ¿çšããããªããžã§ã¯ããã¢ãã¯ãããå Žåã¯ã jest.doMock()
é¢æ°ããã¹ãããŠãæ©èœããŸããã
import myModuleToTest from './myModuleTotest'
describe('Given my module', () => {
it('property1 will work as expect', () => {
// Testing parts of the module that don't need to be mocked
})
it('property2 will work as expected', () => {
jest.doMock('./myOtherModule', () => {
return {
__esModule: true,
default: 'default2',
foo: 'foo2',
};
});
import('./myOtherModule').then(myOtherModule => {
// I'm not interested on the mocked module myOtherModule but on the module that makes use of it
myModuleToTest.doSomethingToSomeProperty(); // At this point myOtherModule's original module and not its mocked version will be used by myModuleToTest
expect(myModuleToTest.someProperty).toBe('thisWillFail'); // The test won't pass because the mocked version wasn't used
});
});
});
Jest 26ã®æç¹ã§ã¯ãéæ¥çã«äœ¿çšãããObject
ããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ãè€æ°åã¢ãã¯ããæ¹æ³ã¯ãããŸããïŒ mockFn.mockImplementation(fn)
ããªãããã Function
以å€ã®ãã®ãã¢ãã¯ããããšãæå³ããŸãïŒ mockFn.mockImplementation(fn)
å²ç¬ã®ããã®Objects
ïŒã ããã¯æ£ããã§ããããããšãäœãã足ããŸãããïŒ ãã®å Žåã®å¯äžã®è§£æ±ºçã¯ãåãã¢ãžã¥ãŒã«ããã¹ãããããã«è€æ°ã®ãã¹ããã¡ã€ã«ãçšæããããšã§ãã
myModuleToTestãã€ã³ããŒãããå Žåã¯ãã¢ãã¯ã®åŸã«ã€ã³ããŒãããå¿
èŠããããŸãã
ã¢ãã¯ãæå³ããªããªãåã«ã ãããã£ãŠãã€ã³ããŒãã䜿çšããªãã§ãã ãã....äžãŸãã¯
ãšã«ããæã¡äžããããŠããã®ã§ãã³ãŒã«ããã¯ã®å
éšã
ç«ã2020幎7æ7æ¥ã«ã¯ã10æ24åPMã¢ã³ãããªã»ã¬ãã³ã[email protected]
æžããŸããïŒ
ãããã£ãŠãåºæ¬çã«ãéæ¥çã«äœ¿çšããããªããžã§ã¯ããã¢ãã¯ãããå Žåã¯ã
jest.doMockïŒïŒé¢æ°ããã¹ãããã³ãŒãã¯æ©èœããŸããïŒ'./myModuleTotest'ããmyModuleToTestãã€ã³ããŒãããŸã
itïŒ 'åäœããŸã'ãïŒïŒ=> {
jest.doMockïŒ './ myOtherModule'ãïŒïŒ=> {
æ»ã {
__esModuleïŒtrueã
ããã©ã«ãïŒ 'default2'ã
fooïŒ 'foo2'ã
};
}ïŒ;importïŒ '../ myOtherModule'ïŒãthenïŒmyOtherModule => {ãè¿ã
//ã¢ãã¯ãããã¢ãžã¥ãŒã«myOtherModuleã«ã¯èå³ããããŸãããããããå©çšããã¢ãžã¥ãŒã«ã«ã¯èå³ããããŸã
myModuleToTest.doSomethingToSomePropertyïŒïŒ; //ãã®æç¹ã§ãã¢ãã¯ããŒãžã§ã³ã§ã¯ãªãmyOtherModuleã®å ã®ã¢ãžã¥ãŒã«ãmyModuleToTestã«ãã£ãŠäœ¿çšãããŸã
expectïŒmyModuleToTest.somePropertyïŒ.toBeïŒ 'thisWillFail'ïŒ; //ã¢ãã¯ããŒãžã§ã³ã䜿çšãããªãã£ãããããã¹ãã¯åæ ŒããŸãã
}ïŒ;}ïŒ;Jest 26ã®æç¹ã§ã¯ããªããžã§ã¯ãããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ãã¢ãã¯ããæ¹æ³ã¯ãããŸããïŒI
éæ¥çã«äœ¿çšãããé¢æ°ä»¥å€ã®äœããæå³ããŸãã ããã¯
æ£ããã§ããããããšãäœãã足ããŸãããïŒ å¯äžã®è§£æ±ºçã¯ãããå€ããæã£ãŠããããšã§ã
åãã¢ãžã¥ãŒã«ããã¹ãããããã®è€æ°ã®ãã¹ããã¡ã€ã«ãâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/jest/issues/2582#issuecomment-655110424 ããŸãã¯
éäŒ
https://github.com/notifications/unsubscribe-auth/AAJR3UW6HARW44ZLKAUB7PLR2N77NANCNFSM4C4I7QSQ
ã
æãåèã«ãªãã³ã¡ã³ã
ãã¹ãéã§ã¢ãã¯ã®æ»ãå€ãå€æŽããã«ã¯ã次ã®ããã«ããŸãã