Как я могу проверить случай переключения, который зависит от параметра? - PullRequest
0 голосов
/ 29 января 2019

У меня есть это:

  const renderComponents = () => {
    switch (selectedService) {
      case 'otherservices':
        return <SoftLayerCancellationRequests />;
      case 'dedicatedhosts':
        return <GetDedicatedHostsCancellations />;
      case 'virtualguestsservers':
        return <SoftLayerGetVirtualGuests />;
      case 'baremetalservers':
        return <GetBareMetalServersCancellations />;
      default:
        return null;
    }
  };

Который в конце вызывается в операторе return компонента:

return (
    <>
      <Header pageTitle={t('cancellations.header')} />

            {accountId ? (
              <>
                <TableToolbarComp />
                {renderComponents()}
              </>
            ) : (
              <UpgradeMessage />
            )}

    </>
  );

И параметр selectedService исходит измагазин:

export default compose(
  connect(store => ({
    accountId: store.global.softlayerAccountId,
    selectedService: store.cancellations.selectedService,
  })),
  translate(),
  hot(module),
)(Cancellations);

Что я могу сделать, чтобы проверить этот случай переключения?

1 Ответ

0 голосов
/ 29 января 2019

Функция в renderComponents должна принимать selectedService в качестве параметра:

const renderComponents = (selectedService) => {
  switch (selectedService) {
    // ...
  }
};

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

it('renders a SoftLayerCancellationRequests when passed "otherservices" as parameter', () => {
  const wrapper = shallow(renderComponents('otherservices'));
  expect(wrapper.find(SoftLayerCancellationRequests)).toHaveLength(1);
})

Тем не менее, я вижу небольшую ценность в таких тестах.Это происходит потому, что функция в основном действует как простая карта:

const serviceToComponent : {
  otherservices: SoftLayerCancellationRequests,
  dedicatedhosts: GetDedicatedHostsCancellations,
  virtualguestsservers: SoftLayerGetVirtualGuests,
  baremetalservers: GetBareMetalServersCancellations
}

, что кажется немного скучным для тестирования.

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

...