Ошибка при попытке макета сторонней библиотеки в шутку - PullRequest
0 голосов
/ 19 сентября 2019

Я сталкиваюсь со следующей ошибкой при выполнении jest.Mock в сторонней библиотеке.Библиотека, о которой идет речь, react-email-editor.

jest.mock("react-email-editor", () => {
    return {
        Editor: <div>Email Editor</div>,
    };
});

Ошибка с jest.mock

    file.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, 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, COUNTER_NET_SERVER_CONNECTION, COUNTER_NET_SERVER_CONNECTION_CLOSE, COUNTER_HTTP_SERVER_REQUEST, COUNTER_HTTP_SERVER_RESPONSE, COUNTER_HTTP_CLIENT_REQUEST, COUNTER_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.

И если я изменю ее на doMock, я получу это:

Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

Примечание: поскольку я использую Typescript и редактор электронной почты реагирования не имеет определений типов, мне пришлось создать файл определения заглушки в корне моего проекта .types/react-email-editor/index.d.ts следующим образом:

declare module "react-email-editor";

Редактировать: список импорта до вызова jest.mock

import { act, fireEvent, render } from "@testing-library/react";
import * as React from "react";
import { EmailEditor, IEmailEditorProps } from "../EmailEditor"; // my wrapper around react-email-editor
import Editor from "react-email-editor";

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, что это должно быть:

jest.mock("react-email-editor", () => () => <div>Email Editor</div>);
...