Ich versuche Tests für meine Anwendung zu schreiben, aber ich zur Zeit die folgenden Fehlermeldung erhalten:Mocking Eine Native Module, wenn sie mit Jest Testen
● Test suite failed to run
TypeError: Cannot read property 'language' of undefined
at Object.<anonymous> (node_modules/react-native-localization/LocalizedStrings.js:17:35)
Es scheint, dass der Fehler durch diese Linie in React-Native-Localization verursacht wird, ruft das Gebietsschema des Gerätes:
var localization = require('react-native').NativeModules.ReactLocalization;
var interfaceLanguage = localization.language.replace(/_/g,'-');
das Paket in einem wrapper
, die übersetzten Strings auf die Komponente zurück, so dass das Paket genannt wird, nicht direkt verwendet wird. Es sieht etwa so aus:
Komponente:
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}`);
}
// ...
}
Reagieren Native-Lokalisierung:
var localization = require('react-native').NativeModules.ReactLocalization;
var interfaceLanguage = localization.language.replace(/_/g,'-');
class LocalizedStrings {
// ...
}
Die localization
Variable außerhalb der Klasse gesetzt und zu versuchen, die Variable so einzustellen, funktioniert bei mir nicht und gibt denselben Fehler zurück:
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" }
// ...
})
Wer weiß, wie das einheimische Modul reagieren zu verspotten?
Das ist, was ich hatte Angst vor. Ich wollte den "Wrapper" nicht "vortäuschen", da viele der Dinge in der "Wrapper" -Klasse tatsächlich verwendet werden, was bedeutet, dass ich auch viele gute Sachen zum "Mock" haben würde. Vielen Dank. – Zidail