Общие утилиты для тестирования с помощью Jest - PullRequest
0 голосов
/ 18 мая 2018

У меня есть некоторые вспомогательные функции, которые я использую среди различных Jest-тестов, например, такую ​​функцию, как эта, для проверки ответа на выборку:

export const mockFetchJsonResponse = (data) => {
    ok: () => true,
    json: () => data
};

Я хотел бы поделиться этими функциями таким образомчто я могу импортировать их и повторно использовать среди моих тестов.Например:

// Some .spec.jsx file
...
import {mockFetchJsonResponse} from some/path/to/shared/tests/utils.jsx

// Then I can use mockFetchJsonResponse inside this test
// ...

Где разместить такие общие функции утилит?

Папка моего проекта выглядит следующим образом:

components/
    CompOne/
        __tests__
        index.jsx
    CompTwo/
        __tests__
        ...
utils/
    __tests__
    http.js
    user.js
    ...

Должен ли я поместить их в utils папка вместе с другими функциями утилит, которые я использую для своего проекта?Тогда я должен написать модульные тесты также для этих функций?

1 Ответ

0 голосов
/ 21 октября 2018

Существует возможность выставлять помощники как глобальные функции без необходимости явного импорта модулей.

  1. Jest позволяет настроить запуск некоторых файлов перед тем, как каждый тестовый файл будет выполнен через setupFiles опция конфигурации
  2. Также Jest предоставляет global объект, который вы можете изменить, и все, что вы положите туда, будет доступно в ваших тестах.

Пример

package.json:

"jest": {
    "setupFiles": ["helpers.js"]
} 

helpers.js:

global.mockFetchJsonResponse = (data) => {
    ok: () => true,
    json: () => data
};

somecomponent.test.js:

mockFetchJsonResponse(); // look mom, I can call this like say expect()!

с помощью TypeScript

TypeScript будет жаловаться на cannot find name 'mockFetchJsonResponse'.Это можно исправить, добавив файл объявления:

helpers.d.ts:

declare function mockFetchJsonResponse(data: any): any;

И добавьте этот файл в раздел files вашего файла tsconfig.json:

// ...
"files": [
    "./.jest/helpers.d.ts"
],
// ...

Это также предоставляет объявление mockFetchJsonResponse всей вашей кодовой базе, что, вероятно, нежелательно.Я не могу придумать простого способа избежать этого.


Конечно, это не ответит на ваш прямой вопрос "куда поместить файлы", но в любом случае это зависит от вас.Вам просто нужно указать эти файлы в разделе setupFiles.Поскольку import не требуется в тестах, это не имеет значения.

Что касается тестирования помощников, я не уверен.Посмотрите, что это часть инфраструктуры тестирования, как сам файл спецификации.И мы не пишем тесты для тестов, иначе это никогда не остановится.Конечно, это зависит от вас - скажите, действительно ли логика действительно сложна и трудна для подражания.Но если хелпер предоставляет слишком сложную / сложную логику, это приведет к тому, что сами тесты будут непонятны, вы согласны?

благодарность этой статье о тестировании компонентов с intl .Никогда прежде не имел дело с globals в шутку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...