From bf7cde1ec3c33c94246064f8682cf106fd5f6857 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 16 Jul 2013 17:20:33 -0400 Subject: [PATCH] Safely silence console messages by spying on console.{warn,error}. This eliminates *all* spurious console messages in `grunt test`, thanks to a great suggestion from @petehunt. --- src/core/__tests__/ReactCompositeComponent-test.js | 4 ++++ src/core/__tests__/ReactInstanceHandles-test.js | 5 +++++ src/core/__tests__/refs-test.js | 6 +++++- src/dom/components/__tests__/ReactDOMTextarea-test.js | 11 +++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/core/__tests__/ReactCompositeComponent-test.js b/src/core/__tests__/ReactCompositeComponent-test.js index 28356063efa..1316bcca2fa 100644 --- a/src/core/__tests__/ReactCompositeComponent-test.js +++ b/src/core/__tests__/ReactCompositeComponent-test.js @@ -134,6 +134,8 @@ describe('ReactCompositeComponent', function() { }); it('should auto bind methods and values correctly', function() { + spyOn(console, "warn"); + var ComponentClass = React.createClass({ getInitialState: function() { return {valueToReturn: 'hi'}; @@ -168,7 +170,9 @@ describe('ReactCompositeComponent', function() { // Next, prove that once mounted, the scope is bound correctly to the actual // component. ReactTestUtils.renderIntoDocument(instance); + expect(console.warn.argsForCall.length).toBe(0); var explicitlyBound = instance.methodToBeExplicitlyBound.bind(instance); + expect(console.warn.argsForCall.length).toBe(1); var autoBound = instance.methodAutoBound; var explicitlyNotBound = instance.methodExplicitlyNotBound; diff --git a/src/core/__tests__/ReactInstanceHandles-test.js b/src/core/__tests__/ReactInstanceHandles-test.js index b5161547c7e..48a6f8a2256 100644 --- a/src/core/__tests__/ReactInstanceHandles-test.js +++ b/src/core/__tests__/ReactInstanceHandles-test.js @@ -138,6 +138,9 @@ describe('ReactInstanceHandles', function() { ReactID.getID(childNodeB) )).toBe(childNodeB); + spyOn(console, "error"); + expect(console.error.argsForCall.length).toBe(0); + expect(function() { ReactInstanceHandles.findComponentRoot( parentNode, @@ -148,6 +151,8 @@ describe('ReactInstanceHandles', function() { 'Unable to find element. This probably means the DOM was ' + 'unexpectedly mutated (e.g. by the browser).' ); + + expect(console.error.argsForCall.length).toBe(1); }); }); diff --git a/src/core/__tests__/refs-test.js b/src/core/__tests__/refs-test.js index 193c9554ac9..4880c31a4d7 100644 --- a/src/core/__tests__/refs-test.js +++ b/src/core/__tests__/refs-test.js @@ -44,7 +44,11 @@ var ClickCounter = React.createClass({ var i; for (i=0; i < this.state.count; i++) { children.push( -
+
); } return ( diff --git a/src/dom/components/__tests__/ReactDOMTextarea-test.js b/src/dom/components/__tests__/ReactDOMTextarea-test.js index 5fbb36a7c65..9fcfd7f99c6 100644 --- a/src/dom/components/__tests__/ReactDOMTextarea-test.js +++ b/src/dom/components/__tests__/ReactDOMTextarea-test.js @@ -62,9 +62,12 @@ describe('ReactDOMTextarea', function() { }); it('should treat children like `defaultValue`', function() { + spyOn(console, "warn"); + var stub = ; var node = renderTextarea(stub); + expect(console.warn.argsForCall.length).toBe(1); expect(node.value).toBe('giraffe'); // Changing children should do nothing, it functions like `defaultValue`. @@ -73,21 +76,29 @@ describe('ReactDOMTextarea', function() { }); it('should allow numbers as children', function() { + spyOn(console, "warn"); var node = renderTextarea(); + expect(console.warn.argsForCall.length).toBe(1); expect(node.value).toBe('17'); }); it("should throw with multiple or invalid children", function() { + spyOn(console, "warn"); + expect(function() { ReactTestUtils.renderIntoDocument( ); }).toThrow(); + expect(console.warn.argsForCall.length).toBe(1); + expect(function() { ReactTestUtils.renderIntoDocument( ); }).toThrow(); + + expect(console.warn.argsForCall.length).toBe(2); }); });