Mocha: Передача флагов в Node.js

Созданный на 7 окт. 2017  ·  17Комментарии  ·  Источник: mochajs/mocha

Я не могу понять, как передать флаг --expose-http2 в узел. Я бы хотел уметь:

mocha test.js -- --expose-http2
OR
mocha test.js --node-flags 'expose-http2'

Возможно ли это в настоящее время (с использованием мокко v3.2.0)?

Самый полезный комментарий

Флаги, которые Mocha передаст Node, находятся в bin/mocha (тогда как собственные флаги Mocha находятся в bin/_mocha ). Чтобы передать узлу другие флаги, которые Mocha не поддерживает, вы можете node <node flags here> node_modules/mocha/bin/_mocha <mocha arguments here> вместо mocha ... .

Все 17 Комментарий

Также мне нужно передать Node.js флаг --experimental-modules для поддержки новых модулей ES6 ( .mjs ).

Флаги, которые Mocha передаст Node, находятся в bin/mocha (тогда как собственные флаги Mocha находятся в bin/_mocha ). Чтобы передать узлу другие флаги, которые Mocha не поддерживает, вы можете node <node flags here> node_modules/mocha/bin/_mocha <mocha arguments here> вместо mocha ... .

Идеально. Спасибо @ScottFreeCode 👍

@jondubois У вас получилось запустить его с --experimental-modules ?

Решение @stefanwalther ScottFreeCode, приведенное выше, у меня хорошо сработало. Вам просто нужно запустить сценарий мокко с помощью команды node а не напрямую с помощью команды mocha . Вы можете добавить сценарий npm test в свой package.json чтобы использовать альтернативный подход вместо команды mocha .

Что ж ... Я не могу заставить его работать с --experimental-modules потому что node жалуется:

$ node --experimental-modules node_modules/.bin/_mocha
Error [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension: node_modules/mocha/bin/_mocha
    at Loader.exports.resolve [as resolver] (internal/loader/ModuleRequest.js:126:13)
    at Loader.resolve (internal/loader/Loader.js:71:40)
    at Loader.getModuleJob (internal/loader/Loader.js:101:40)
    at Loader.import (internal/loader/Loader.js:128:28)

Ты заставил это работать @ michael-brade?

@seenickcode нет, я отказался от этого и пока не буду использовать модули. Модули вызвали массу проблем с набором инструментов, и я потратил на это слишком много своего драгоценного времени. Может, попробую еще раз через год или два, когда будет готово.

вы можете использовать esm, если хотите использовать модули. установите esm, а затем добавьте -r esm shoud.

@pukapukan действительно так!

@pukapukan отлично работает, спасибо!

Я изначально был сбит с толку, где это добавить (будь то флаг узла или флаг мокко), но мои тесты работают после следующего изменения package.json :

 "scripts": {
-  "test": "mocha test.js"
+  "test": "mocha test.js -r esm"
 }

надеюсь, что это поможет кому-то еще немного запутаться по той же причине

@pukapukan отлично работает, спасибо!

Я изначально был сбит с толку, где это добавить (будь то флаг узла или флаг мокко), но мои тесты работают после следующего изменения package.json :

 "scripts": {
-  "test": "mocha test.js"
+  "test": "mocha test.js -r esm"
 }

надеюсь, что это поможет кому-то еще немного запутаться по той же причине

ОШИБКА: не удается найти модуль esm.

ОШИБКА: не удается найти модуль esm.

попробуйте npm install esm

У кого-нибудь получилось, что это работает с Node 12 и --experimental-modules ?

Мой test скрипт выглядит так:

    "test": "node --experimental-modules node_modules/mocha/bin/_mocha \"test/**/*_test.js\"",

Но я все еще получаю синтаксическую ошибку на import {} в моих тестовых модулях. В моем package.json тоже есть "type": "module" .

@justinfagnani После экспериментов с поддержкой экспериментальных модулей в Node и чтения того, как работает новая поддержка , я считаю, что тестирование модулей ES с использованием только Mocha _ в настоящее время невозможно заставить работать, используя только Node_.

Использование встроенной поддержки невозможно, пока Mocha не решит это сделать, изменив свое ядро. Вы можете передать флаги, чтобы включить поддержку модуля в Node, например: node --experimental-modules $(npm bin)/_mocha , но он все равно выйдет из строя при запуске кода с использованием import * from './my-module' со следующей ошибкой:

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/fatso/dev/sinon/test/es2015/module-support-assessment-test.mjs

Уууут? Причина, по которой Node жалуется, заключается в том, что Mocha импортирует тестовые файлы, используя обычный CommonJS require , в то время как Node требует, чтобы он использовал import для включения режима, в котором файлы выполняются как модули ES. Это означает, что _Mocha_ должен измениться, чтобы это работало. Пока этого не произошло, ваш ответ - требовать внешний модуль esm (самый простой) или использовать транспиляцию (если у вас нет другого пути).

Копия: @stefanwalther

mocha -r esm test/*.mjs
node --experimental-modules ./node_modules/mocha/bin/mocha test/*.mjs

оба терпят неудачу для меня с Must use import to load ES Module

@brandonros Я связался со статьей команды Node о том, как поддержка нового модуля работает в Node 12. Выдержка:

Файлы, оканчивающиеся на .mjs, явно обрабатываются как модули ES в операторах импорта и при запуске с помощью команды узла.

Это означает, что вы _не можете_ ожидать, что файлы, заканчивающиеся на .mjs будут обрабатываться каким-либо другим образом, даже при загрузке дополнительной библиотеки: Node по-прежнему будет использовать другое поведение во время выполнения для этих файлов. Вы используете библиотеку esm чтобы включить поддержку модуля ES, когда сама среда выполнения узла _не поддерживает его_, что означает, что если ваши файлы не рассматриваются как модули ES самим узлом, модуль esm сделает убедитесь, что синтаксис не вызывает ошибок времени выполнения при обнаружении синтаксиса, такого как import и export .

Единственное изменение, которое вам нужно сделать, - это изменить расширение файла на что-то, что явно не обрабатывается Node каким-либо определенным образом, например .es6 или просто .js . Вы можете видеть , что мы делаем в Sinon при тестировании функциональности ESM .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги