Где разместить общие данные в тестах шутки
Я не уверен, как организовать код для тестирования шутки.
У меня есть все мои тесты под __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.