Если вы интегрируете тестирование с Jest и Enzyme в новую версию React 0.57 и TypeScript, они не будут работать.Вот шаги по воспроизведению:
Создание нового проекта React Native:
react-native init MyApp -package "com.my.app" --template typescript && node MyApp/setup.js
Установка всех пакетов, связанных с Jest и Enzyne:
npm install --save-dev react-dom enzyme enzyme-react-adapter-16 jest-fetch-mock ts-jest
Добавление конфигурации Jest:
"jest": {
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
"testPathIgnorePatterns": [
"\\.snap$",
"<rootDir>/node_modules/"
],
"cacheDirectory": ".jest/cache",
"setupFiles": [
"./tests/setup.js"
]
}
Добавьте файл tests/setup.js
и включите следующую конфигурацию:
import Enzyme from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import { NativeModules } from "react-native";
global.fetch = require("jest-fetch-mock"); // eslint-disable-line no-undef
jest.mock("react-native-config");
Enzyme.configure({ adapter: new Adapter() });
И последнее, но не менее важное: добавьте базовый тест (App.test.tsx), чтобы проверить, является ли Jestи работа фермента:
import React from "react";
import { shallow } from "enzyme";
import { View } from "react-native";
import App from "./App";
const createTestProps = props => ({
...props
});
describe("App", () => {
describe("rendering", () => {
let wrapper;
let props;
beforeEach(() => {
props = createTestProps({});
wrapper = shallow(<App {...props} />);
});
it("should render a <View />", () => {
expect(wrapper.find(View)).toHaveLength(1);
});
});
});
Если вы сейчас попытаетесь запустить тест, вы получите сообщение об ошибке:
FAIL app/App.test.tsx
● Test suite failed to run
Couldn't find preset "module:metro-react-native-babel-preset" relative to directory "<Directory"
Редактировать
Похоже, что это имеетчто-то делать с Бабелем.