Я использую jest
для написания тестов моих React Native Algolia Search компонентов.
A (очень урезанный) NoResults
компонент:
import React from 'react'
import { Text, View } from 'react-native'
import { connectStateResults } from 'react-instantsearch-native'
const NoResults = ({ searching, searchState: { query } }) => searching || !query ? null : (
<View>
<Text>No Results</Text>
</View>
)
export default connectStateResults(NoResults)
в <projectRoot>/__mocks__/react-instantsearch-native.js
module.exports = jest.genMockFromModule('react-instantsearch-native')
И мой тест
import 'react-native'
import React from 'react'
import renderer from 'react-test-renderer'
import * as risn from 'react-instantsearch-native'
import NoResults from './NoResults'
jest.mock('react-instantsearch-native')
it('renders correctly', () => {
risn.connectStateResults.mockImplementation(comp => comp({ searching: true, searchState: { query: '' } }))
const tree = renderer.create(<NoResults />).toJSON()
expect(tree).toMatchSnapshot()
})
Я обнаружил, что connectStateResults
никогда ничего не возвращает.
Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
19 | })
20 |
> 21 | const tree = renderer.create(<NoResults />).toJSON()
Я проверил, и макет определенно загружается и используется, но он используется до того, как установлена функция mockImplementation
.
Как правильно насмехаться над разъемами Algolia?
Обновление
Поддержка Algolia предложила изменить строку
risn.connectStateResults.mockImplementation(comp => comp({ searching: true, searchState: { query: '' } }))
на
risn.connectStateResults.mockImplementation(comp => () => comp({ searching: true, searchState: { query: '' } }))
, но это не имеет значения