рдореИрдВ RN . рдореЗрдВ Picker
рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП #1960 рд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
import React, {Component} from 'react';
jest.mock(`Picker`, () => {
// ...etc
});
рдЬреЗрд╕реНрдЯ 17 рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЗрд╕реНрдЯ 18 рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ:
/Users/simonsmith/Sites/new-look/newlookapp/test/unit/setup.js: babel-plugin-jest-hoist: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: React
Whitelisted objects: Array, ArrayBuffer, ..... etc
рдореИрдВ рд░рд┐рдПрдХреНрдЯ 15.4.2 рдФрд░ рдЖрд░рдПрди 0.40 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдореИрдВрдиреЗ babel-jest@test
рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╡реЗ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдЪрд▓рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рднреА рд╕реНрдиреИрдкрд╢реЙрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░реЙрдкреНрд╕ рдЖ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ babel-jest
рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?
рдзрдиреНрдпрд╡рд╛рдж :)
рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
jest.mock(`Picker`, () => {
const React = require('react');
});
рдпрд╣ рдПрдХ рдмрдЧ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдареАрдХ рдХрд┐рдпрд╛ рдерд╛ред рдПрдХ рдирдХрд▓реА рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдЪрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпреЛрдВ: jest.resetModules()
рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╢реАрд░реНрд╖ рд╕реНрддрд░ рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рд┐рдПрдХреНрдЯ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред
рдЖрд╣ рд╣рд╛, рдпрд╣реА рд╡рд╣ рдмрд┐рдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдПрдХ рдкреНрд░рдпреЛрдЧ рдареАрдХ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рд╣реИред рдЕрдкрдиреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ mockFoo
ред
рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдореЙрдХ рд╣реИрдВ:
jest.mock('./OfferList', () => 'OfferList');
jest.mock('./OfferHeader', () => 'OfferHeader');
jest.mock('./OfferHiredModal', () => 'OfferHiredModal');
рдХреНрдпрд╛ рдореБрдЭреЗ рд╣рд░ рдПрдХ рдореЙрдХ рдореЗрдВ const React = require('React');
рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛?
рд╣рд╛рдВред
jest.mock(`Picker`, () => {
const React = require('React');
});
рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реАрдЖрдИ (рд╕рд░реНрдХрд▓/рдЧрд┐рдЯрд▓реИрдм) рдореЗрдВ рд╡рд┐рдлрд▓ рджреЗрдЦрддрд╛ рд╣реИ, рди рдХрд┐ рдЙрдирдХреЗ рд╕реНрдерд╛рдиреАрдп, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ React
рдПрдХ рд▓реЛрдЕрд░рдХреЗрд╕ рд╣реИ react
jest.mock(`Picker`, () => {
const React = require('react');
});
@cpojer рдореИрдВ __dirname
рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рднреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдЬреБрдбрд╝реЗ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЬреИрд╕реЗ /Users/xx/project
@cpojer рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╕рдордЭрддрд╛:
рдпрджрд┐ рдЖрдк рд╢реАрд░реНрд╖ рд╕реНрддрд░ рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рд┐рдПрдХреНрдЯ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред
рдЕрдЧрд░ рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рднреА рд╣реЛрдВрдЧреА, рд╣реИ рдирд╛?
рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЖрдк рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ jest.resetModules()
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЖрдк рдЗрд╕ рдХрд╛рдо рдХреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдлрдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдЖрдк import
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/airbnb/babel-plugin-dynamic-import-node
@SimenB рдзрдиреНрдпрд╡рд╛рдж ... рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рддрдм рдирдХрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрд╕рд┐рдВрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдХрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реИ?
рдмрд╕ рд╡рд╛рджреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИред
let myDep;
beforeEach(async () => {
jest.resetModules();
myDep = await import('./some-modules.js');
})
рдкрддрд╛ рдирд╣реАрдВ рдпрд╣ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдВрджрд░ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдордЬрд╝рд╛рдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ:
/**
* @jest-environment jsdom
*/
import SagaTester from "redux-saga-tester";
import supportRequests from "sagas/support_requests";
import reducers from "reducers";
import { fetched } from "actions/support_requests";
describe("success", () => {
it("sends the message via connection", async () => {
const sagaTester = new SagaTester({
reducers: reducers,
initialState: {
router: { location: { pathname: "/support_requests" } },
supportRequests: null,
authenticated: true,
currentUser: { isSupportAgent: true },
},
});
jest.mock("sagas/oauth", () => {
return {
...require.requireActual("sagas/oauth"),
callFetch: function* () {
return { ok: true, json: () => Promise.resolve({ support_requests: [], meta: { pagination: {} } }) };
},
};
});
sagaTester.start(supportRequests);
await sagaTester.waitFor(fetched);
});
});
рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ (...) рдФрд░ рдЬреЗрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмреИрдмреЗрд▓ рджреНрд╡рд╛рд░рд╛ _extends
рдФрд░ regeneratorRuntime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
babel-plugin-jest-hoist: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: _extends
Whitelisted objects: Array, ArrayBuffer, Boolean, DataView, Date, Error, EvalError, Float32Array, Float64Array, Function, Generator, GeneratorFunction, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, NaN, Number, Object, Promise, Proxy, RangeError, ReferenceError, Reflect, RegExp, Set, String, Symbol, SyntaxError, TypeError, URIError, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakSet, arguments, expect, jest, require, undefined, console, DTRACE_NET_SERVER_CONNECTION, DTRACE_NET_STREAM_END, DTRACE_HTTP_SERVER_REQUEST, DTRACE_HTTP_SERVER_RESPONSE, DTRACE_HTTP_CLIENT_REQUEST, DTRACE_HTTP_CLIENT_RESPONSE, global, process, Buffer, clearImmediate, clearInterval, clearTimeout, setImmediate, setInterval, setTimeout.
Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` are permitted.
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ? рдореИрдВ рдирд╡реАрдирддрдо рдордЬрд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде:
Invalid variable access: _asyncToGenerator
рдореИрдВ рдмреИрдмреЗрд▓-рдкреНрд▓рдЧрдЗрди-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рд░реАрдЬреЗрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ " jest.mock()
рдХреЗ рдореЙрдбреНрдпреВрд▓ рдлреИрдХреНрдЯреНрд░реА" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрд╛рдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ "рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрдЙрдЯ-рдСрдл-рд╕реНрдХреЛрдк рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ" ?!
// рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╣реИ
it('should request data via API', async () => {
const store = mockStore({ fields: initialState });
jest.resetModules();
jest.mock('services/api-client', () => ({
getFieldsByFarm: async () => {
return [{ field: {} }];
},
}));
const Actions = require('./actions');
const expected = [
{ type: 'FIELDS/REQUEST' },
{ type: 'FIELDS/RECEIVE', payload: { items: [{ field: {} }], didInvalidate: false },},
];
await store.dispatch(Actions.getFieldsByFarm());
const dispatchedActions = store.getActions();
expect(dispatchedActions[0]).toEqual(expected[0]);
expect(dispatchedActions[1].payload).toEqual(expect.objectContaining(expected[1].payload));
});
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрд╕рд┐рдВрдХ рдЖрдИрдЖрдИрдПрдлрдИ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рд╛рдордиреЗ async
рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЬреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ:
it('should request data via API', (done) => {
const store = mockStore({ fields: initialState });
jest.resetModules();
jest.mock('services/api-clients/nana', () => ({
getFieldsByFarm: async () => {
return [{ field: {} }];
},
}));
const Actions = require('./actions');
(async () => {
const expected = [
{ type: 'FIELDS/REQUEST' },
{
type: 'FIELDS/RECEIVE',
payload: { items: [{ field: {} }], didInvalidate: false },
},
];
await store.dispatch(Actions.getFieldsByFarm());
const dispatchedActions = store.getActions();
expect(dispatchedActions[0]).toEqual(expected[0]);
expect(dispatchedActions[1].payload).toEqual(expect.objectContaining(expected[1].payload));
done();
})();
});
jest.doMock
jest.mock
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдорджрдж рдорд┐рд▓реА рд╣реИред
рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реА рд╣реИрдВ (ЁЯШД) рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рдВред рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ doMock
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ mock
рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рднреА рдереА рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЪрд░ рдХреЛ "MockedComponent" рдирд╛рдо рд╕реЗ рд░рдЦрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ "mockedComponent" рдбрд╛рд▓рд╛ рддреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рдерд╛ред
'jest.mock' рдХреЙрд▓реНрд╕ 'рдЗрдЯ' рдХреЙрд▓реНрд╕ рд╕реЗ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдмрд╛рд╣рд░реА рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред 'jest.doMock' рдХреЙрд▓ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВ nodejs 10.0.0
рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдмрд╕ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@ рд╕реВрдирддрд╛рдУ рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рдЬрдирди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ?
@ рд╕рд┐рдореЗрдирдмреА
рдЖрдкрдХреЗ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕реЗ node v10
рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЬрдм рдореИрдВ рдиреЛрдбрдЬ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЦреЛ рджрд┐рдпрд╛ред
рдиреЛрдбрдЬ 10.0.0 . рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдкрд░ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛
/xxx/node_modules/react-native/jest/setup.js: babel-plugin-jest-hoist: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: console
Whitelisted objects: Array, ArrayBuffer, Boolean, DataView, Date, Error, EvalError, Float32Array, Float64Array, Function, Generator, GeneratorFunction, Infinity, Int16Array, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, NaN, Number, Object, Promise, Proxy, RangeError, ReferenceError, Reflect, RegExp, Set, String, Symbol, SyntaxError, TypeError, URIError, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakSet, arguments, expect, jest, require, undefined, DTRACE_NET_SERVER_CONNECTION, DTRACE_NET_STREAM_END, DTRACE_HTTP_SERVER_REQUEST, DTRACE_HTTP_SERVER_RESPONSE, DTRACE_HTTP_CLIENT_REQUEST, DTRACE_HTTP_CLIENT_RESPONSE, global, process, Buffer, clearImmediate, clearInterval, clearTimeout, setImmediate, setInterval, setTimeout.
Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` are permitted.
at invariant (node_modules/babel-plugin-jest-hoist/build/index.js:14:11)
at newFn (node_modules/babel-traverse/lib/visitors.js:276:21)
at NodePath._call (node_modules/babel-traverse/lib/path/context.js:76:18)
at NodePath.call (node_modules/babel-traverse/lib/path/context.js:48:17)
at NodePath.visit (node_modules/babel-traverse/lib/path/context.js:105:12)
at TraversalContext.visitQueue (node_modules/babel-traverse/lib/context.js:150:16)
рдЗрд╕рдХрд╛ рдиреЛрдб 10 рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ console
рдирд╣реАрдВ рд╣реИред рдкреАрдЖрд░ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ globals
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...
рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ рдпрд╣рд╛рдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛: #6075
yarn add --dev babel-jest babel-core regenerator-runtime
рдХреЗ рд╕рд╛рде рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рдареАрдХ рд╣реЛ рдЧрдИред
рдЧреБрдЧрд▓рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдмрд╕ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ:
_рдпрджрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирдХрд▓реА рдЖрд▓рд╕реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ mock
рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдЪрд░ рдирд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред_
YourComponentName рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рд╕ рдЪреАрдЬрд╝ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрдВ
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ tsx рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ jest.conf рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ (рдЙрд╕ рдХреЛрдб рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдЕрдкрдиреА spec.tsx рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ tsx рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛:
globals: {
jasmine: true,
+ 'ts-jest': {
+ babelConfig: true
+ }
}
module.exports = {
// eslint-disable-next-line no-undef
rootDir: path.resolve(__dirname, '../'),
roots: ['<rootDir>/src'],
verbose: false,
moduleFileExtensions: ['ts', 'tsx', 'vue', 'js', 'jsx', 'json'],
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|js)x?$',
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
transform: {
'^.+\\.vue$': 'vue-jest',
'^.+\\.(js|jsx)?$': 'babel-jest',
'^.+\\.tsx?$': 'ts-jest'
},
transformIgnorePatterns: ['<rootDir>/node_modules/(?!lodash-es)'],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
setupFilesAfterEnv: ['<rootDir>/test/jest.init.ts'],
// run tests with --coverage to see coverage
coverageDirectory: '<rootDir>/test/coverage',
coverageReporters: ['html', 'text-summary'],
collectCoverageFrom: ['src/**/*.{ts,tsx,js,jsx,vue}', '!**/node_modules/**'],
globals: {
jasmine: true,
'ts-jest': {
babelConfig: true
}
}
}
рдореБрдЭреЗ рдорд┐рд▓реА рддреНрд░реБрдЯрд┐:
babel-plugin-jest-hoist: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: _debounce
Whitelisted objects: Array, ArrayBuffer, Boolean, DataView, Date, Error, EvalError, Float32Array, Float64Array, Function, Generator, GeneratorFunction, Infinity, Int16Arra
y, Int32Array, Int8Array, InternalError, Intl, JSON, Map, Math, NaN, Number, Object, Promise, Proxy, RangeError, ReferenceError, Reflect, RegExp, Set, String, Symbol, SyntaxEr
ror, TypeError, URIError, Uint16Array, Uint32Array, Uint8Array, Uint8ClampedArray, WeakMap, WeakSet, arguments, console, expect, isNaN, jest, parseFloat, parseInt, require, un
defined, DTRACE_NET_SERVER_CONNECTION, DTRACE_NET_STREAM_END, DTRACE_HTTP_SERVER_REQUEST, DTRACE_HTTP_SERVER_RESPONSE, DTRACE_HTTP_CLIENT_REQUEST, DTRACE_HTTP_CLIENT_RESPONSE,
COUNTER_NET_SERVER_CONNECTION, COUNTER_NET_SERVER_CONNECTION_CLOSE, COUNTER_HTTP_SERVER_REQUEST, COUNTER_HTTP_SERVER_RESPONSE, COUNTER_HTTP_CLIENT_REQUEST, COUNTER_HTTP_CLIEN
T_RESPONSE, global, process, Buffer, clearImmediate, clearInterval, clearTimeout, setImmediate, setInterval, setTimeout.
Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case inse
nsitive) are permitted.
рдХреЛрдб рд╣реА:
const DEBOUNCE_DELAY = 10
const _debounce = jest.requireActual('lodash-es/debounce').default
jest.mock('lodash-es/debounce', () =>
jest.fn((fn) => _debounce(fn, DEBOUNCE_DELAY))
)
рдореБрдЭреЗ рдЗрд╕реЗ рдЬрд╛рджреВ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЗрдирд▓рд╛рдЗрди рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛:
jest.mock('lodash-es/debounce', () =>
jest.fn((fn) => jest.requireActual('lodash-es/debounce').default(fn, 10))
)
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдореЗрдВ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд┐рдирд╛ ( 'ts-jest': { babelConfig: true }
) рдХреЛрдб рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдореИрдВ tsx рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рдореБрдЭреЗ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
Jest encountered an unexpected token
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
Here's what you can do:
тАв To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
тАв If you need a custom transformation specify a "transform" option in your config.
тАв If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/en/configuration.html
Details:
C:\Users\Alend\vue-project\src\my-component\MyComponent.spec.tsx:20
render: function () { return <div id="foo">Foo</div>; }
^
package.json рд╕реЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг:
"@babel/core": "^7.4.5",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "24.8.0",
"jest": "24.8.0",
"ts-jest": "24.0.2",
рдФрд░ рдмреЗрдмреЗрд▓ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ:
module.exports = {
presets: [
[
'@babel/preset-env',
{
modules: 'commonjs',
targets: {
browsers: ['> 1%', 'last 2 versions', 'not ie <= 11']
}
}
],
'@vue/babel-preset-jsx'
],
plugins: [
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-export-namespace-from',
'@babel/plugin-proposal-function-sent',
'@babel/plugin-proposal-json-strings',
'@babel/plugin-proposal-numeric-separator',
'@babel/plugin-proposal-throw-expressions',
'@babel/plugin-syntax-dynamic-import',
['@babel/plugin-transform-runtime', { corejs: 2 }],
['@babel/plugin-proposal-decorators', { legacy: true }]
]
}
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЕрдм рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
`
рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐: рдореЙрдХрдХрдВрдкреЛрдиреЗрдВрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
17 | const mockComponent = () => <div>Mock</div>;
18 |
> 19 | jest.mock('./components/Component', () => ({ Component: mockComponent }));
`
@khrysyn
Jest рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ jest.mock рдХреЙрд▓ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдлрд╣рд░рд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ mockComponent
const рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм jest.mock рдЪрд▓рддрд╛ рд╣реИред
рдЗрд╕ "рдореБрджреНрджреЗ/рд╕реБрд╡рд┐рдзрд╛" рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ:
jest.mock('./components/Component', () => ({ Component: jest.fn() }));
import { Component } from "./components/Component";
Component.mockImplementation(() => <div>Mock</div>);
@khrysyn
Jest рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ jest.mock рдХреЙрд▓ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдлрд╣рд░рд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛mockComponent
const рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм jest.mock рдЪрд▓рддрд╛ рд╣реИредрдЗрд╕ "рдореБрджреНрджреЗ/рд╕реБрд╡рд┐рдзрд╛" рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ:
jest.mock('./components/Component', () => ({ Component: jest.fn() })); import { Component } from "./components/Component"; Component.mockImplementation(() => <div>Mock</div>);
рдХреНрдпрд╛ рдпреЗ рд╡рд╛рдХрдИ рд╕рд╣реА рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ @nckblu рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 'рдирдХрд▓реА' рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдФрд░ 'mockComponent' рдЙрд╕ рдЕрдкрд╡рд╛рдж рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?
рдЗрд╕ рдмреАрдЪ, рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЪреЗрдХрд┐рдВрдЧ...'), рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреЛ рдЧреНрд▓реЛрдмрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХреЗред
global.console.log('global console working')
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
jest.doMock
jest.mock
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдорджрдж рдорд┐рд▓реА рд╣реИред