node.jsアプリケーション(基本的にRESTバックエンド)をモカとスーパーテストを使用してユニットテストしている間、画面に表示されるテスト固有のメッセージだけが必要ですが、stdoutにはアプリケーションログメッセージが散らかっています。
単体テストを開始します:
mocha -R spec .
...そして、この出力を取得します(これは本来あるべきではないものです):
[App] Listening on port 3000 ...
[App] Starting app, hooray!
Project API
GET /projects
[App] entering "projects" module ...
√ should return an array of projects (317ms)
アプリケーションログメッセージに[App]のマークを付けました。私が本当に欲しいのはユニットテストからのこの出力です:
Project API
GET /projects
√ should return an array of projects (317ms)
Mochaのレポーター出力が点在するアプリケーションによるconsole.log / warn / error出力を抑制するにはどうすればよいですか?
解決:
dankohnのアプローチに従って、私はこのようになりました(これは私の問題を解決します(ロギングにwinstonを使用しています):
(ノードの「メイン」サーバーファイル、server.js :)
if (process.env.NODE_ENV !== 'test') {
logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({ filename: 'foo.log' })
]
});
} else {
// while testing, log only to file, leaving stdout free for unit test status messages
logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({ filename: 'foo.log' })
]
});
}
... env変数を設定するには、各ユニットテストファイルを次のように開始します。
process.env.NODE_ENV = 'test';
app.jsで:
if (process.env.NODE_ENV !== 'test') {
app.use(express.logger());
}
各モカファイルの上部:
process.env.NODE_ENV = 'test';
更新:
この関数をインポートコードで使用します。
function logExceptOnTest(string) {
if (process.env.NODE_ENV !== 'test') {
console.log(string);
}
}
次に、あなたのすべてを置き換えるconsole.log('it worked')
とlogExceptOnTest('it worked')
。基本的なトリックは、必要なロギングのレベルに関するグローバルフラグとして環境変数を使用することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加