簡體   English   中英

如何在npm run中使用Mocha?

[英]How to use Mocha with npm run?

目的

使用npm run運行Mocha測試,而不會出現ELIFECYCLE錯誤。

背景

在關於mocha和npm的最后一個問題之后,我發現Mocha結果返回失敗測試的數量。

現在,當使用npm運行腳本(通過npm run )時,腳本必須返回0,否則npm將拋出ELIFECYCLE錯誤並使腳本執行崩潰。

問題

這顯然非常笨拙 ,因為在開發代碼時,測試應該失敗。 這是正常現象,我們不希望每次錯過斷言時代碼都崩潰。

這幾乎迫使我重新啟動所有內容,而令我震驚的是,在以前的npm版本中,這種崩潰行為不存在。

目前,我正在使用npm 3.10.3版本。

我嘗試了什么

運行測試時讀取npm error ELIFECYCLE之后,我看到了一種可能的解決方案。 但是由於此解決方案將抑制各種錯誤(甚至會導致應用程序崩潰),所以我寧願不實施它。

問題

  • 如何在Mocha中運行測試(知道有些測試失敗),而不會因為ELIFECYCLE錯誤而完全崩潰整個應用程序?
  • 此問題在npm的最新版本中已解決嗎? (最新版本是什么,因為我在任何地方都找不到它?)

任何幫助,將不勝感激。

您是否考慮過通過以下方式從代碼中運行Mocha:

const Mocha = require('mocha');

module.exports = () => {
  // Instantiate a Mocha instance.
  const mocha = new Mocha({
    ui: 'bdd',
    fullTrace: true,
  });

  const testDir = 'test/spec';

  config.getGlobbedFiles(`${testDir}/**/*.spec.js`, './').forEach((filePath) => {
    mocha.addFile(filePath);
  });

  // Run the tests.
  mocha.run((failures) => {
    process.exit(failures);  // exit with non-zero status if there were failures
  });
};

為了從gulp運行它,您可以使用:

const minimist = require('minimist');

const knownOptions = {
  string: 'params',
  default: {
    params: '',
  },
};
const options = minimist(process.argv.slice(2), knownOptions);

...

gulp.task('test', () => {
  if (process.env.NODE_ENV !== 'test') {
    throw new Error('Wrong NODE_ENV value. Tests must be ran with "test"');
  }
  // eslint-disable-next-line import/no-dynamic-require, global-require
  return require('test/test')(options.params); // where `test/test` is test runner above
});

我尚未對此進行測試,但我認為如果您將腳本更新為以下內容:

"test": "mocha || true"

如果失敗,它將返回代碼0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM