SRC / услуги / backend.ts:
export const login = ({ metadataKey }) =>
axiosInstance
.get(`${API.DEFAULT_BROKER}${API.V1_LOGIN_PATH}/${metadataKey}`)
.then(({ data }: any) => data);
export default {
...
login
};
У меня есть файл, который импортирует backend.ts
и использует функцию login
. Когда я импортирую его, используя import { login } from "../../services/backend";
, он работает:
import { login } from "../../services/backend";
...
login({
metadataKey
})
Проходной тест:
PASS src/redux/epics/authentication-epic.test.ts
✓ authenticationEpic loginEpic (9ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.607s, estimated 2s
Ran all test suites matching /src\/redux\/epics\/authentication-epic.test.ts/i.
Однако, когда я импортирую его, используя экспорт по умолчанию, он всегда не определен:
import backend from "../../services/backend";
...
backend.login({
metadataKey
})
Неудачный тест:
FAIL src/redux/epics/authentication-epic.test.ts
✕ authenticationEpic loginEpic (37ms)
● authenticationEpic loginEpic
TypeError: Cannot read property 'login' of undefined
22 |
23 | return from(
> 24 | backend.login({
| ^
25 | metadataKey
26 | })
27 | ).pipe(
Я заметил ту же проблему даже со сторонними библиотеками. Например, я использую node-forge
, но он ломался, если я не изменил
import forge from "node-forge";
до:
import { md } from "node-forge";
Я что-то пропустил? Это шутливый раздел моего package.json:
"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx,mjs}"
],
"setupFiles": [
"<rootDir>/config/polyfills.js"
],
"testMatch": [
"<rootDir>/src/**/*.{js,jsx,mjs,ts}",
"<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs,ts}"
],
"globals": {
"window": true
},
"testEnvironment": "jsdom",
"testURL": "http://localhost",
"transform": {
"^.+\\.jsx?$": "<rootDir>/node_modules/babel-jest",
"^.+\\.tsx?$": "ts-jest",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
],
"moduleNameMapper": {
"^react-native$": "react-native-web"
},
"moduleFileExtensions": [
"web.js",
"js",
"json",
"web.jsx",
"jsx",
"node",
"mjs",
"ts",
"tsx"
]
}