Где разместить общие данные в тестах шутки

Я не уверен, как организовать код для тестирования шутки.

У меня есть все мои тесты под __tests__ и все мои издевательства под __mocks__. Теперь у меня есть некоторые данные, которые я хочу разделить между тестами: они не являются макетом существующей функции, они всего лишь некоторый объект javascript, который я хотел бы использовать в разных файлах.

Должен ли я создать каталог __data__?

Или поставить их под __mocks__ любом случае?

Или в каталоге __tests__ не помещая -test в имя файла?

Ответ 1

Краткий ответ - где угодно.

У JavaScript было много разных этапов в жизни, и многие люди его использовали. Вероятно, именно поэтому большинство инструментов в наши дни легко настраиваются, что позволяет персонализировать (настраивать).

Даже Джест сам показывает эти признаки. Например, средство проверки соответствия будет искать тесты либо в папках __tests__, либо в файлах, которые содержат .spec или .test.

Или согласно их документам в визуальной манере:

├── __tests__
│   └── component.spec.js # test
│   └── anything # test
├── package.json # not test
├── foo.test.js # test
├── bar.spec.jsx # test
└── component.js # not test

Что касается приборов и других тестовых файлов, то ответ тот же, единого способа сделать это не существует.

Выберите, что работает для вас.

Я рекомендую для структуры __tests__ размещать данные приборов рядом с тестами, использующими их, и, если нескольким тестам необходим доступ, перемещать их дальше вверх по проекту, пока они не будут в общем месте.

Я предпочитаю папку tests для хранения тестов, приборов и тестов отдельно от кода src.

Ответ 2

Я в основном согласен с @Alex.

Но обычно, вместо того, чтобы всегда перемещать данные в другой файл, я предпочитаю хранить реальные фиктивные данные API для одного конкретного случая внутри самого тестового файла.

Я отношусь к ним как к разделу PropType React Components, сохраняя их на кнопке тестового файла (__test__, __spec__, *test.js или *.spec.js), но внутри файла, если мне не нужно делиться.

Вот супер простой пример с axios:

src/__mocks__/axios.js

export default {
  get: jest.fn(() => Promise.resolve({ data: [] })),
};

Затем Axios подвергается насмешкам, поэтому сейчас, если мы хотим протестировать супер простую утилиту API-оболочки, такую как:

import Axios from 'axios';

export const yourMethod = async () => {
  return new Promise(resolve => {
    Axios.get('yourAPIEndPoint')
      .then(result => {
        resolve([...result.data]);
      })
      .catch(e => {
        console.error('should treat the error', e);
      });
  });
};

Для меня один тест может быть только:

import Axios from 'axios';
import { yourMethod } from './borrame';

describe('yourMethod TestCase', () => {
  it('it returns the data you expect', async () => {
    // Specific response for this test case.
    Axios.get.mockImplementationOnce(() =>
      Promise.resolve({
        data: yourMethodMockData,
      })
    );

    const result = await yourMethod();
    expect(result[0].id).toBe(yourMethodRawMockData[0].id);
  });
});

/**
 * Specific Test Data
 */
const yourMethodMockData = [
  {
    id: '12345',
    name: 'Name for 12345',
  },
];

Несмотря на то, что если одни и те же фиктивные данные будут повторно использоваться вне тестовых файлов, я перемещаю эти фиктивные данные в другие .js внутри папки __test__ и экспортирую их для повторного использования.

Я даже создал mockAPIGenerators, когда мне нужно "сгенерировать" данные .json на основе параметров вызова API, но для меня общим правилом всегда является KIS

Так что у кнопки как константа в одном и том же тестовом файле, если этого вам недостаточно enough.