response-native-vector-icons + mocha: Инвариантное нарушение

Это мой компонент. Работает без проблем на эмуляторе / телефоне:

// mycomponent.js
import React, {Component} from 'react';
import {View} from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome';

export class MyComponent extends Component {
    // ...
    render () {
        return (
            <View>
               <Icon
                   name="check"
                   size={25}
                   color={'#62B300'}
               />
            </View>
        )
    }
}

Но когда я запускаю модульное тестирование в этом файле (mocha --recursive test/**/*. Js):

// mycomponent.spec.js
import chai from 'chai';
import TestRenderer from 'react-test-renderer';
import mock from 'mock-require';
import 'react-native-mock-render/mock';
import {MyComponent} from '../app/components/MyComponent';

mock('react-native-vector-icons/FontAwesome', {});


describe('MyComponent', () => {
    it('should render', () => {
       const mycomponent = TestRenderer.create(<MyComponent>);

       return expect(mycomponent.root).to.exist;
    }
}

Это бросает:

Нарушение инварианта: Тип элемента недопустим: ожидал строку (для встроенных компонентов) или класс / функцию (для составных компонентов), но получил: объект. Вероятно, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы, возможно, перепутали значения по умолчанию и именованный импорт.

Проверьте метод визуализации MyComponent,

Это работает, если я использую <View> вместо <Icon> но это надо издеваться. Как я могу это исправить?

1 ответ

Решение

Решил это. Чтобы заставить это работать, макет должен возвращать функцию, возвращающую null вместо объекта.

mock('react-native-vector-icons/FontAwesome', () => null);
Другие вопросы по тегам