簡體   English   中英

如何檢測mocha測試是否在node.js中運行?

[英]How to detect if a mocha test is running in node.js?

我想確保代碼在測試模式下運行時,它不會(意外地)訪問錯誤的數據庫。 檢測代碼當前是否在測試模式下運行的最佳方法是什么?

正如評論中已經提到的那樣,構建代碼意識到測試是不好的做法。 我甚至無法在SO甚至外面找到提到的話題。 但是,我可以想辦法檢測在測試中啟動的事實。 對我來說,mocha不會將自己添加到global范圍,但添加了global.it 所以你的支票可能是

var isInTest = typeof global.it === 'function';

我建議你確保你沒有錯誤檢測,以便為你最有可能在你的node.js測試中使用的global.sinonglobal.chai添加檢查。

根據我的經驗,檢查process.argv是一個很好的方法。

例如,如果我在測試期間console.log(process.argv) ,我會得到以下內容:

[
  'node',
  '/usr/local/bin/gulp',
  'test',
  '--file',
  'getSSAI.test.unit.js',
  '--bail',
  '--watch'
]

從中可以看出正在使用gulp。 使用yargs可以更輕松地解釋這一點。

我非常同意Kirill,並且一般來說代碼不應該知道它正在被測試(在你的情況下,你可以通過構造函數傳遞你的數據庫綁定/連接嗎?),對於像日志這樣的東西,我可以看到為什么你可能想要發現這個。

最簡單的選擇是使用detect-mocha [NPM包。

var detectMocha = require('detect-mocha');
if(detectMocha()) {
  // doSomethingFancy
}

如果您不想這樣做, 相關的代碼就是

function isMochaRunning(context) {
  return ['afterEach','after','beforeEach','before','describe','it'].every(function(functionName){
    return context[functionName] instanceof Function;
})

context是當前window還是global window

我同意@Joshua的回答,他說檢查過程。在我的經​​歷中 ,argv 是一個很好的方法。

所以,我寫了一個簡單的檢測摩卡代碼。

const _MOCHA_PATH = new RegExp('(\\\\|/)node_modules\\1mocha\\1bin\\1_mocha$');
var isMochaRunning = process.argv.findIndex(arg => _MOCHA_PATH.test(arg)) > -1;

在一個沒有日志記錄基礎設施的小項目中,我使用

if (process.env.npm_lifecycle_event !== 'test')
  console.error(e);

避免在測試期間記錄預期的錯誤,因為它們會干擾測試輸出。

暫無
暫無

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

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