Я изучаю тестирование с Jest для реагирования на родной язык. У меня есть компонент нижнего колонтитула, который использует React Native Tts для воспроизведения звука при нажатии кнопки.
https://github.com/ak1394/react-native-tts
Код работает нормально, когда я запускаю его на устройстве, но я получаю следующую ошибку при запуске теста
TypeError: _reactNativeTts.default.addEventListener is not a function
Вот мой код для компонента.
export default class Footer extends React.Component {
state = {
isPlaying: false
};
_onPress = () => {
Tts.stop()
this.setState({
isPlaying: false
})
this.props.onPressItem();
};
componentDidMount() {
Tts.getInitStatus().then(() => {
console.log('I AM READY TO PLAY SOUND')
Tts.addEventListener('tts-start', (event) => {
console.log("finish", event)
this.setState({
isPlaying: true
})
});
Tts.addEventListener('tts-finish', (event) => {
console.log("finish", event)
this.setState({
isPlaying: false
})
});
Tts.addEventListener('tts-cancel', (event) => {
console.log("finish", event)
this.setState({
isPlaying: false
})
});
Tts.setDefaultLanguage('en-NZ');
Tts.setDefaultRate(0.47);
Tts.setDefaultPitch(0.55);
if(Platform.OS === 'ios')
{
Tts.setDefaultVoice('com.apple.ttsbundle.Samantha-compact');
}
});
}
stopPlayback = () => {
var playBack = this.state.isPlaying
if (playBack === true) {
Tts.stop();
this.setState({
isPlaying: false
})
}
else {
this.setState({
isPlaying: true
})
Tts.speak(this.props.infoText);
}
}
componentWillUnmount() {
Tts.stop()
this.setState({
isPlaying: false
})
}
render() {
return (
<View style={this.props.showKeyboard ? styles.bottomButtonWithKeyboard : styles.bottomButton}>
<TouchableHighlight onPress={this.stopPlayback} underlayColor='#00000000' testID="SoundBtnID">
<Image style={styles.soundStyle} source={this.state.isPlaying ? Images.speaker: Images.muteBtn} />
</TouchableHighlight>
<TouchableHighlight style={styles.buttonNextStyle} onPress={this._onPress} underlayColor='#00000000' testID="NextBtnID">
<Text style={styles.buttonText}>NEXT</Text>
</TouchableHighlight>
</View>
)
}
}
Ниже приведен код для FooterTest. js
import 'react-native'
import React from 'react'
import Footer from '../../App/Components/FooterButton/Footer'
import renderer from 'react-test-renderer'
test('Footer test', () => {
let i = 0
const onPress = () => i++
const tree = renderer.create(<Footer infoText='This is a test' onPressItem={() => {}} />).toJSON()
expect(tree).toMatchSnapshot()
})
Также тест пройден, если я закомментирую componentDidMount
, Не уверен, что я здесь делаю не так. Посмотрел документацию по Тц. Любая помощь будет принята с благодарностью. Заранее спасибо