浏览代码

Merge pull request #20782 from takahirox/ConsoleLoggingLevel

Tests: Add Console wrapper to introduce logging level to console for unit tests
Mr.doob 4 年之前
父节点
当前提交
e161c46b76
共有 3 个文件被更改,包括 68 次插入0 次删除
  1. 5 0
      test/unit/src/math/Color.tests.js
  2. 1 0
      test/unit/three.source.unit.js
  3. 62 0
      test/unit/utils/console-wrapper.js

+ 5 - 0
test/unit/src/math/Color.tests.js

@@ -2,6 +2,7 @@
 
 import { Color } from '../../../../src/math/Color';
 import { eps } from './Constants.tests';
+import { CONSOLE_LEVEL } from '../../utils/console-wrapper';
 
 export default QUnit.module( 'Maths', () => {
 
@@ -483,7 +484,11 @@ export default QUnit.module( 'Maths', () => {
 		QUnit.test( "setStyleRGBARed", ( assert ) => {
 
 			var c = new Color();
+
+			console.level = CONSOLE_LEVEL.ERROR;
 			c.setStyle( 'rgba(255,0,0,0.5)' );
+			console.level = CONSOLE_LEVEL.DEFAULT;
+
 			assert.ok( c.r == 1, "Red: " + c.r );
 			assert.ok( c.g === 0, "Green: " + c.g );
 			assert.ok( c.b === 0, "Blue: " + c.b );

+ 1 - 0
test/unit/three.source.unit.js

@@ -1,3 +1,4 @@
+import './utils/console-wrapper.js';
 import './utils/qunit-utils.js';
 
 //src

+ 62 - 0
test/unit/utils/console-wrapper.js

@@ -0,0 +1,62 @@
+// This easy console wrapper introduces the logging level to console for
+// preventing console outputs caused when we purposely test the code path
+// including console outputs.
+//
+// Example: Prevent the console warnings caused by Color.setStyle().
+//   const c = new Color();
+//   console.level = CONSOLE_LEVEL.ERROR;
+//   c.setStyle( 'rgba(255,0,0,0.5)' );
+//   console.level = CONSOLE_LEVEL.DEFAULT;
+//
+// See https://github.com/mrdoob/three.js/issues/20760#issuecomment-735190998
+
+export const CONSOLE_LEVEL = {
+	OFF : 0,
+	ERROR : 1,
+	WARN : 2,
+	LOG : 3,
+	INFO : 4,
+	DEBUG : 5,
+	ALL: 6,
+	DEFAULT: 6
+};
+
+console.level = CONSOLE_LEVEL.DEFAULT;
+
+// Save the original methods
+console._error = console.error;
+console._warn = console.warn;
+console._log = console.log;
+console._info = console.info;
+console._debug = console.debug;
+
+// Wrap console methods
+console.error = function () {
+
+	if ( this.level >= CONSOLE_LEVEL.ERROR ) this._error.apply( this, arguments );
+
+};
+
+console.warn = function () {
+
+	if ( this.level >= CONSOLE_LEVEL.WARN ) this._warn.apply( this, arguments );
+
+};
+
+console.log = function () {
+
+	if ( this.level >= CONSOLE_LEVEL.LOG ) this._log.apply( this, arguments );
+
+};
+
+console.info = function () {
+
+	if ( this.level >= CONSOLE_LEVEL.INFO ) this._info.apply( this, arguments );
+
+};
+
+console.debug = function () {
+
+	if ( this.level >= CONSOLE_LEVEL.DEBUG ) this._debug.apply( this, arguments );
+
+};