Skip to content

Instantly share code, notes, and snippets.

@pysoftware
Created August 25, 2020 03:05
Show Gist options
  • Save pysoftware/e8ea2fcd69b6b053927a244cff2ebf10 to your computer and use it in GitHub Desktop.
Save pysoftware/e8ea2fcd69b6b053927a244cff2ebf10 to your computer and use it in GitHub Desktop.

Как прогнать тесты в определенной папке

Проблема:

Если в проекте огромное количество тестов и нужно фиксануть покрытие 2-3 тестов, то приходится постоянно запускать npm run test, который запускает все тесты. Возможен запуск тестов для определенной папки (запускаются тесты в данной папке и все тесты в подпапках + покрытие кода показывается только для данного уровня).

Решение:

  • Обновить ava до версии ^3.11.1 (devDependencies)
  • Поставить пакет @ava/babel (моя версия "^1.0.1") (devDependencies)
  • В package.json в разделе scripts добавить новую команду "test-local": "node localtest.js". Пример в файле
  • Рядом с package.json добавить файл localtest.js с содержимым согласно файлу

Как пользоваться:

Перейти в любую папку и запустить npm run test-local, при этом запустятся только тесты для данной директории и покажется покрытие только для данной директории

Предостережения
  • Решение тестировалось на Linux, как поведет себя на винде я не знаю
  • При запуске данного скрипта ava не чистит кеш, это можно настроить, однако почему-то при команде ava --reset-cache она запускает вообще все тесты.
  • Возможно стоит объединить скрипты npm test и npm run test-local в один, однако npm run test-local не выбивает ошибку в консоли в конце вывода, в случае, если покрытие кода не 100% или зафейлились
Файлы:

localtest.js

const path = require('path');
const {spawn} = require('child_process');
const relpath = path.relative(__dirname, process.env.INIT_CWD);

if (!relpath) {
    spawn('nyc', ['ava'], { shell: true, stdio: 'inherit' });
} else {
    spawn('nyc', [`-n '${relpath}/**/*.js'`, `-n '${relpath}/**/*.jsx'`, 'ava', `'${relpath}/**/*.test.js'`], { shell: true, stdio: 'inherit' });
}

package.json

{
    "nyc": {
        "all": true,
        "check-coverage": true,
        "branches": 100,
        "lines": 100,
        "functions": 100,
        "statements": 100,
        "include": [
            "src/**/*.js",
            "src/**/*.jsx"
        ],
        "exclude": [
            "src/**/*.test.js",
            "src/**/index.js",
            "src/app.jsx",
            "src/store.js"
        ],
        "parser-plugins": [
            "jsx",
            "asyncGenerators",
            "bigInt",
            "classProperties",
            "classPrivateProperties",
            "dynamicImport",
            "importMeta",
            "objectRestSpread",
            "optionalCatchBinding"
        ]
    },
    "scripts": {
        "test-local": "node localtest.js"
    },
    "devDependencies": {
        "@ava/babel": "^1.0.1",
        "ava": "^3.11.1"
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment