[英]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.sinon
和global.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.