Реагируйте с родным тестированием Tts с помощью Jest - PullRequest
0 голосов
/ 12 февраля 2020

Я изучаю тестирование с 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 , Не уверен, что я здесь делаю не так. Посмотрел документацию по Тц. Любая помощь будет принята с благодарностью. Заранее спасибо

...