Я пытаюсь писать тесты для моего приложения, но я в настоящее время получаю следующее сообщение об ошибке:Дразнящих собственный модуль при тестировании с Jest
● Test suite failed to run
TypeError: Cannot read property 'language' of undefined
at Object.<anonymous> (node_modules/react-native-localization/LocalizedStrings.js:17:35)
кажется, что ошибка вызвана этой линией в React-Native-Localization, что извлекает локаль устройства:
var localization = require('react-native').NativeModules.ReactLocalization;
var interfaceLanguage = localization.language.replace(/_/g,'-');
пакет используется в wrapper
, который возвращает переведенные строки в компонент, поэтому пакет не вызывается непосредственно. Это выглядит примерно так:
Компонент:
import wrapper from '../wrapper'
class component extends Component {
render() {
return(
<Text>{wrapper.getString(key)}</Text>
);
}
// ...
}
Wrapper:
import LocalizedStrings from 'react-native-localization'
class wrapper {
constructor() {
this.translations = new LocalizedStrings(...);
}
getString(key) {
return eval(`this.translations.${key}`);
}
// ...
}
React-Native-Локализация:
var localization = require('react-native').NativeModules.ReactLocalization;
var interfaceLanguage = localization.language.replace(/_/g,'-');
class LocalizedStrings {
// ...
}
Переменная localization
устанавливается вне класса и попытка установить переменную как это не работает для меня и возвращает ту же ошибку:
jest.mock('react-native-localization',() => {
// This doesn't work
const localization = { language: "en-US" }
// This doesn't work either, because it hits the var initialization
const rnl = require.requireActual('react-native-localization')
rnl.localization = { language: "en-US" }
// ...
})
Кто-нибудь знает, как издеваться над этим реактивным модулем?
Вот что я боялся. Я не хотел «издеваться» над «оберткой», так как многие вещи внутри класса «обертка» фактически использовались, то есть у меня было бы много плюсов, чтобы «макет». Спасибо. – Zidail