diff --git a/package.json b/package.json
index e76cb11ff3..bbbbf7d670 100644
--- a/package.json
+++ b/package.json
@@ -62,6 +62,7 @@
"rootDir": "",
"scriptPreprocessor": "scripts/jest/preprocessor.js",
"setupEnvScriptFile": "scripts/jest/environment.js",
+ "setupTestFrameworkScriptFile": "scripts/jest/test-framework-setup.js",
"testFileExtensions": [
"coffee",
"js",
diff --git a/scripts/jest/test-framework-setup.js b/scripts/jest/test-framework-setup.js
new file mode 100644
index 0000000000..107f6a8d43
--- /dev/null
+++ b/scripts/jest/test-framework-setup.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var env = jasmine.getEnv();
+
+var oldError = console.error;
+var newError = function() {
+ oldError.apply(this, arguments);
+ var spec = env.currentSpec;
+ if (spec) {
+ var expectationResult = new jasmine.ExpectationResult({
+ passed: false,
+ message:
+ 'Expected test not to warn. If the warning is expected, mock it ' +
+ 'out using spyOn(console, \'error\'); and test that the warning ' +
+ 'occurs.',
+ });
+ spec.addMatcherResult(expectationResult);
+ }
+};
+console.error = newError;
+
+// Make sure console.error is set back at the end of each test, or else the
+// above logic won't work
+afterEach(function() {
+ // TODO: Catch test cases that call spyOn() but don't inspect the mock
+ // properly.
+
+ if (console.error !== newError && !console.error.isSpy) {
+ var expectationResult = new jasmine.ExpectationResult({
+ passed: false,
+ message: 'Test did not tear down console.error mock properly.',
+ });
+ env.currentSpec.addMatcherResult(expectationResult);
+ }
+});
diff --git a/src/renderers/dom/client/__tests__/ReactMount-test.js b/src/renderers/dom/client/__tests__/ReactMount-test.js
index ebba06f968..632f04bf6b 100644
--- a/src/renderers/dom/client/__tests__/ReactMount-test.js
+++ b/src/renderers/dom/client/__tests__/ReactMount-test.js
@@ -212,16 +212,16 @@ describe('ReactMount', function() {
});
var container = document.createElement('div');
- console.error = mocks.getMockFunction();
+ spyOn(console, 'error');
var component = RD1.render(