Запуск тестов для папок в папках из package.json - PullRequest
0 голосов
/ 09 мая 2018

У меня есть приложение с командой test, установленной в package.json следующим образом:

"test": "mocha --require babel-core / register --watch-extensions js ** / *. Test.js",

К сожалению, структура папок моих приложений идет глубже, чем позволяет мне эта команда. Это выглядит примерно так:

app
└── someFolder
    └── subFolder
        └── subSubFolder
            └── fileNeedsToBeTest.js
            └── fileNeedsToBeTest.test.js
└── anotherFolder
    └── anotherFileNeedsToBeTest.js
    └── anotherFileNeedsToBeTest.test.js

Проблема в том, что команда test стоит. Я могу проверить только то, что находится в anotherFolder, но мне также нужно проверить файлы в someFolder/subFolder/subSubFolder. Я не хотел указывать точные пути, потому что у меня есть несколько случаев, когда это происходит в приложении.

Как я могу исправить мою команду test, чтобы можно было найти *.test.js файлы независимо от того, насколько глубоко они могут быть в папках?

1 Ответ

0 голосов
/ 10 мая 2018

Ваш шаблон глобуса **/*.test.js должен быть заключен в двойные кавычки ("..."), однако, поскольку в JSON указано, что их необходимо экранировать обратной косой чертой, то есть \"...\".

Ваша команда test должна быть изменена на следующее:

"test": "mocha --require babel-core/register --watch-extensions js \"**/*.test.js\"",

Это позволит найти все файлы, заканчивающиеся .test.js, в корне каталога вашего проекта на многих уровнях.

Совет: Я предполагаю, что ваша папка app существует в корне вашего проекта, на том же уровне, что и ваши директории package.json и node_modules.Если это сценарий, то шаблон glob **/*.test.js потенциально найдет любые файлы, заканчивающиеся на .test.js из каталога node_modules, что также приведет к запуску этих тестов.Чтобы предотвратить это, вы можете отменить каталог node_modules в шаблоне глобуса, как показано ниже:

"test": "mocha --require babel-core/register --watch-extensions js \"{,!(node_modules)/**/}*.test.js\""

РЕДАКТИРОВАТЬ:

В ответ наследующий комментарий:

... откуда взята {,!(node_modules)/**/}*.test.js часть команды?Какой это синтаксис?

Мокко использует node-glob в качестве одной из зависимостей .Синтаксис для этой части команды определяется node-glob (... который аналогичен синтаксису, который Bash использует для расширения globbing / pathname).

Ссылку на этот синтаксис можно найти в Glob Primer раздел документации по node-glob.

Объяснение конкретного шаблона, используемого для этого сценария:

Давайте разберем соответствующие части этого шаблона...

             (A) Braced section
              │
    ┌─────────┴──────────┐
    {,!(node_modules)/**/}*.test.js
     │└──────┬──────┘└─┬┘ │└───┬───┘
     │       │         │  │    │
     │       │         │  │   (F) filename extension
     │       │         │  │
     │       │         │ (E) Single Globstar
     │       │         │
     │       │        (D) Double Globstar
     │       │
     │      (C) Negation section
     │
    (B) Comma-delimited
  • (A) Раздел в скобках: Документы описывают это как:

    Перед разбором части путиузоры, скрепленные разделы раскладываются в набор.Разделы в скобках начинаются с { и заканчиваются }, с любым количеством разделенных запятыми разделов внутри.Разделы в скобках могут содержать символы косой черты, поэтому a{/b/c,bcd} расширится до a/b/c и abcd.

  • (B), разделенных запятыми

    Секция в скобках начинается с разделителя запятой, потому что следующая секция Negation (часть, начинающаяся с !), должна следовать за другим шаблоном - это можетне быть в начале.Здесь начальный шаблон перед запятыми не был предоставлен;в этом сценарии это просто подразумевает каталог проекта (или, точнее, тот же / текущий каталог, где хранится package.json).На самом деле мы могли бы изменить шаблон на любой из следующих, и мы получили бы те же результаты.

    {/,!(node_modules)/**/}*.test.js
     ^
    
    {./,!(node_modules)/**/}*.test.js
     ^^
    

    Обратите внимание, либо /, либо ./ были добавлены в шаблон соответственно перед запятой-разделителем.Это так же, как мы можем определять пути к ресурсам в html, javascript и т. Д.

  • (C) Отрицательная секция

    ! означает «не соответствует этому» или «игнорировать это» .Документы описывают это как:

    !(pattern|pattern|pattern) Соответствует всему, что не соответствует ни одному из предоставленных шаблонов.

    В нашем сценарии используется игнорирование node_modulesпапка.

  • (D) Двойной глобстар

    Часть /**/ соответствует любому количеству символов, включая /.Возможно, более просто это означает, что нужно сканировать все файлы и подпапки, независимо от уровня.

  • (E) Один Globstar

    Соответствует всем всемсимволы имени файла, если / когда они заканчиваются указанным расширением имени файла (F).

  • (F) расширение имени файла

    Соответствовать всем файламзаканчивающийся расширением имени файла .test.js.

...