Skip to content
This repository has been archived by the owner on Jan 7, 2019. It is now read-only.

Latest commit

 

History

History
101 lines (80 loc) · 2.39 KB

test-files-indentation.s.md

File metadata and controls

101 lines (80 loc) · 2.39 KB

[Standard] Test files indentation

Why

Standardizing the indentation of a test file saves the developer 30 seconds per new function to test.

Checks

There are 2 cases:

Case 1: The tested file exports at least 1 named function

Use the following indentation even if only one function is tested:

  • 1 describe per file
  • 1 describe per function
  • 1 it for each case

Case 2: The tested file exports only 1 function or element as default

Use the following indentation:

  • 1 describe with the name of the file
  • 1 it for each functionality

Good examples

Case 1: Generic example

describe('Name of the tested file', () => {
  describe('function1', () => {
    it('does something', () => {
      //...
    });
    it('does some other thing', () => {
      //...
    });
  });

  describe('function2', () => {
    it('does something', () => {
      //...
    });
    it('does some other thing', () => {
      //...
    });
  });
});

Case 1: A saga test with redux-saga-test-plan

import { testSaga } from 'redux-saga-test-plan';
import { buyRoamingPackage, fetchRoamingBundlesSaga } from './sagas';
import { selectedRoamingPackageSelector } from '../../TopUps/Bundle/selectors';
import { setLoading } from '../../LoadingStatus/actions';

describe('sagas', () => {
  describe('buyRoamingPackage', () => {
    it('initializes the product and buy it', () => {
      const roamingPackage = { ouid: '4' };
      testSaga(buyRoamingPackage, { type: 'BUY_ROAMING_PACKAGE' })
        .next()
        .select(selectedRoamingPackageSelector)
        // ...
        .isDone();
    });
  });

  describe('fetchRoamingBundlesSaga', () => {
    it('fetches the roaming bundles and store them', () => {
      testSaga(fetchRoamingBundlesSaga, {
        type: 'FETCH_ROAMING_BUNDLES',
      })
        .next()
        .put(setLoading('roamingOffer', true))
        // ...
        .isDone();
    });
  });
});

Case 2: A react-native component

import React from 'react';
import IdentityRequirements from './IdentityRequirements';
import renderer from 'react-test-renderer';

describe('<IdentityRequirements />', () => {
  it('renders correctly', () => {
    const tree = renderer.create(<IdentityRequirements />);
    expect(tree.toJSON()).toMatchSnapshot();
  });
});

Bad examples // @TODO