Я не могу понять, как передать флаг --expose-http2
в узел. Я бы хотел уметь:
mocha test.js -- --expose-http2
OR
mocha test.js --node-flags 'expose-http2'
Возможно ли это в настоящее время (с использованием мокко v3.2.0)?
Также мне нужно передать 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 .
Самый полезный комментарий
Флаги, которые Mocha передаст Node, находятся в
bin/mocha
(тогда как собственные флаги Mocha находятся вbin/_mocha
). Чтобы передать узлу другие флаги, которые Mocha не поддерживает, вы можетеnode <node flags here> node_modules/mocha/bin/_mocha <mocha arguments here>
вместоmocha ...
.