После обновления до Expo SDK 33 с 32, есть проблемы с выполнением тестов в шутку. При издевательстве над возвращаемым значением Jest жалуется, что Response не является конструктором.
const mockGet = jest.fn();
mockGet.mockReturnValue(new Response(
JSON.stringify({
data: true
}),
{ status: 200 }
));
Вот фрагмент текущего package.json
соответствующих пакетов.
{
"devDependencies": {
"@babel/core": "^7.2.2",
"@types/enzyme": "3.9.1",
"@types/expo": "^32.0.13",
"@types/jest": "23.3.10",
"@types/react": "^16.5.0",
"@types/react-native": "^0.57.20",
"babel-core": "^7.0.0-0",
"babel-eslint": "10.0.1",
"babel-jest": "23.6.0",
"babel-preset-expo": "^5.0.0",
"enzyme": "3.9.0",
"enzyme-adapter-react-16": "1.12.1",
"enzyme-to-json": "3.3.5",
"eslint": "5.11.0",
"jest": "24.8.0",
"jest-cli": "24.8.0",
"jest-expo": "^33.0.0",
"react-dom": "16.8.6",
"raf": "3.3.2",
"ts-jest": "^24.0.2",
"tslint": "5.12.0",
"typescript": "3.5.2"
},
"scripts": {
"jest": "node node_modules/jest-expo/bin/jest.js --runInBand",
"lint": "tslint src/**/*.ts",
"test": "npm run jest && tslint src/**/*.tsx && eslint .",
},
"jest": {
"preset": "jest-expo",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"setupFiles": [
"raf/polyfill",
"<rootDir>/test-setup.js"
],
"transform": {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "ts-jest"
}
},
"dependencies": {
"expo": "^33.0.0",
"react": "16.8.3",
"react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",
}
До обновления с 32 до 33 эти тесты с использованием объекта Response успешно работали. Теперь после обновления тестовый набор вызывает ошибку TypeError.
Единственными модулями, которые изменили версии, являются jest-expo
(32.0.0 -> ^ 33.0.0), ts-jest
(23.10.5 -> ^ 24.0.2), typescript
(3.4.3 -> 3.5 .2) и наконец expo
(^ 32.0.0 -> ^ 33.0.0). Модуль react-native
также был обновлен из собственного архива Expo-sdk-32 до sdk-33.
Я пробовал разные версии модулей, пытаясь увидеть, где изменилось определение ответа. Например, я понизил jest-expo
с v33 до v32, в то время как expo
был v33. Это не помогло, так как привело к полному отказу комплекта тестов, как показано ниже.
● Test suite failed to run
Cannot find module 'expo-react-native-adapter' from 'setup.js'
at Resolver.resolveModule (node_modules/@jest/core/node_modules/jest-resolve/build/index.js:230:17)
at Object.<anonymous> (node_modules/jest-expo/src/setup.js:203:6)
Будем весьма благодарны за любую помощь в том, как предотвратить появление ошибки TypeError во время тестов. Также может быть полезно отметить, что TypeScript не обнаруживает эту ошибку типа в intellij.