TypeError: Невозможно прочитать свойство 'prototype' undefined в тесте jest - PullRequest
0 голосов
/ 11 сентября 2018

**************************** РЕДАКТИРОВАНИЕ И ОБНОВЛЕНИЕ **************** ********

У меня есть компонент Дополнительная информация, который использует реагирующую навигацию:

export class AdditionalInfo extends NavigationPureComponent {
  static navigationOptions = ({ navigation }) => ({
    headerLeft: <Button icon="close" onPress={() => navigation.goBack(null)} />,
  })

  buildNavigator = () => {
    const { extendedDescriptions } = this.nav.params
    const tabs = {}

    extendedDescriptions.forEach(({ caption, description }, index) => {
      tabs[`Tab${index}`] = {
        screen: () => (
          <ScrollView style={{ backgroundColor: color('white') }}>
            <Wrapper style={{ paddingTop: spacing() }}>
              <SafeAreaView>
                <Html html={description} />
              </SafeAreaView>
            </Wrapper>
          </ScrollView>
        ),
        navigationOptions: {
          title: caption,
        },
      }
    })

    return createMaterialTopTabNavigator(tabs, {
      backBehavior: 'none',
      lazy: true,
      tabBarOptions: {
        activeTintColor: color('b'),
        inactiveTintColor: color('b'),
        indicatorStyle: {
          backgroundColor: color('b'),
        },
        scrollEnabled: extendedDescriptions.length > 3,
        style: {
          backgroundColor: color('white'),
        },
      },
    })
  }

  render () {
    const AdditionalInfoNavigator = this.buildNavigator()

    return <AdditionalInfoNavigator />
  }

Мой файл AdditionalInfo.test.jsx выглядит так:

describe('Additional Info', () => {
  test('Additional info component Exists', () => {
    const length = 4
    const extendedDescriptions = Array.from({ length }).map((value, index) => ({
      caption: `Tab ${index}`,
      description: `${lorem}`,
    }))
    const obj = shallow(<AdditionalInfo navigation={{ extendedDescriptions }} />)
  })
})

Я пытаюсь написать тест для проверки существования этого компонента AdditionalInfo и, возможно, еще несколько, но получаю странную ошибку, сообщающую

TypeError: Cannot read property 'prototype' of undefined

      15 | 
      16 |     console.debug(extendedDescriptions)
    > 17 |     const obj = shallow(<AdditionalInfo navigation={{ extendedDescriptions }} />)

Мне кажется, я не предоставляю все, что нужно тестовому экземпляру AdditionalInfo? Или я не правильно использую мелководье?

Я использую NavigationPureComponent, который определен как:

-----> export const NavigationPureComponent = navMixin (PureComponent)

const navMixin = (CurrentComponent) => {
  class Nav extends CurrentComponent {
    get nav () {
      const value = new Navigation(this)
      // reset `this.nav` to always be value, this way the this
      // get nav function only gets called the first time it's accessed
      Object.defineProperty(this, 'nav', {
        value,
        writable: false,
        configurable: false,
      })
      return value
    }
  }

  Nav.propTypes = {
    navigation: PropTypes.shape({}).isRequired,
  }

  return Nav
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

отвечая, только если кто-то найдет это как я.

//if exporting as 
export class AdditionalInfo extends NavigationPureComponent {}
//then import
import { AdditionalInfo } from '../pathToYourComponent'
//if exporting as 
class AdditionalInfo extends NavigationPureComponent {}
export default AdditionalInfo
//then import
import AdditionalInfo from '../pathToYourComponent'
0 голосов
/ 04 октября 2018

Как вы импортируете Компонент в свой тест?

Вы не описали это выше, поэтому я полагаю, что вы не рассматриваете это как проблему.

Я видел эту ошибку раньше. При экспорте компонента в виде класса вы должны импортировать компонент в тест как объект.

Попробуйте это:

export class AdditionalInfo extends NavigationPureComponent {}

Когда вы импортируете в свой тест:

import { AdditionalInfo } from '../pathToYourComponent'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...