Реализация перечислителя: Использовать структуру или класс?

Если вы тестируете компонент без подключения HOC. Тогда вы никогда не увидите реквизиты из mapStateToProps, поскольку импортированный вами компонент не запускает функцию соединения.

Вам нужно будет импортировать подключенный компонент, а затем обернуть его в провайдере. wrapper должен иметь все необходимое.

-

Редактировать: Если нет возможности получить доступ к подключенному компоненту, просто используйте компонент и объявите все реквизиты вручную.

Примерно так:

import { Foo } from '../foo';

const props = {
  title: 'Hello',
  subTitle: 'World'
};

describe('<Foo />', () => {
  test('should make props available', () => {
    const wrapper = mount(<Foo {...props} />);
    expect(wrapper.props).toEqual(props);
  });
});
11
задан Hosam Aly 21 December 2008 в 14:48
поделиться

6 ответов

Как это другие, я выбрал бы класс. Изменяемые структуры противны. (И поскольку Jared предлагает, я использовал бы блок итератора. Кодирование руки перечислитель трудно для разбираний.)

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

9
ответ дан 3 December 2019 в 01:34
поделиться

Самый легкий способ записать перечислитель в C# с "шаблоном" возврата урожая. Например.

public IEnumerator<int> Example() {
  yield return 1;
  yield return 2;
}

Этот шаблон сгенерирует весь код перечислителя под капотом. Это вынимает решение из Ваших рук.

9
ответ дан 3 December 2019 в 01:34
поделиться

Перечислитель является по сути изменяющейся структурой, так как он должен обновить внутреннее состояние для хождения дальше к следующему значению в исходном наборе.

По-моему, структуры должны быть неизменными, таким образом, я использовал бы класс.

5
ответ дан 3 December 2019 в 01:34
поделиться

Запишите этому использование yield return.

Относительно того, почему Вы могли бы иначе выбрать между class или struct, если Вы делаете это a struct затем это упаковывается, как только это возвращается как интерфейс, таким образом делая это a struct правые дела дополнительное копирование для происхождения. Не видьте точку этого!

5
ответ дан 3 December 2019 в 01:34
поделиться

Подробно остановиться на @Earwicker: Вы обычно более обеспечены не запись типа перечислителя и вместо этого использование yield return чтобы иметь компилятор пишут это для Вас. Это вызвано тем, что существует много важной тонкости, которую Вы могли бы пропустить, если Вы делаете это сами.

Посмотрите ТАК вопрос, "Для чего используется ключевое слово урожая в C#?" еще для некоторых деталей о том, как использовать его.

Также у Raymond Chen есть серия сообщений в блоге ("Реализация итераторов в C# и его последствиях": части 1, 2, 3, и 4) которые показывают Вам, как реализовать итератор правильно без yield return, который показывает, насколько сложный это, и почему необходимо просто использовать yield return.

1
ответ дан 3 December 2019 в 01:34
поделиться

Есть пара сообщений в блоге , посвященных именно этой проблеме. По сути, структуры перечислителя - действительно плохая идея ...

1
ответ дан 3 December 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: