react/scripts/jest/spec-equivalence-reporter/setupTests.js
Andrew Clark 8e25ed20bd
Unify noop and test renderer assertion APIs (#14952)
* Throw in tests if work is done before emptying log

Test renderer already does this. Makes it harder to miss unexpected
behavior by forcing you to assert on every logged value.

* Convert ReactNoop tests to use jest matchers

The matchers warn if work is flushed while the log is empty. This is
the pattern we already follow for test renderer. I've used the same APIs
as test renderer, so it should be easy to switch between the two.
2019-02-25 19:01:45 -08:00

65 lines
1.5 KiB
JavaScript

/*!
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
const expect = global.expect;
let numExpectations = 0;
global.expect = function() {
numExpectations += 1;
return expect.apply(this, arguments);
};
const spyOn = global.spyOn;
// Spying on console methods in production builds can mask errors.
// This is why we added an explicit spyOnDev() helper.
// It's too easy to accidentally use the more familiar spyOn() helper though,
// So we disable it entirely.
// Spying on both dev and prod will require using both spyOnDev() and spyOnProd().
global.spyOn = function() {
throw new Error(
'Do not use spyOn(). ' +
'It can accidentally hide unexpected errors in production builds. ' +
'Use spyOnDev(), spyOnProd(), or spyOnDevAndProd() instead.'
);
};
global.spyOnDev = function(...args) {
if (__DEV__) {
return spyOn(...args);
}
};
global.spyOnDevAndProd = spyOn;
global.spyOnProd = function(...args) {
if (!__DEV__) {
return spyOn(...args);
}
};
expect.extend({
...require('../matchers/interactionTracing'),
...require('../matchers/toWarnDev'),
...require('../matchers/reactTestMatchers'),
});
beforeEach(() => (numExpectations = 0));
jasmine.currentEnv_.addReporter({
specDone: spec => {
console.log(
`EQUIVALENCE: ${spec.description}, ` +
`status: ${spec.status}, ` +
`numExpectations: ${numExpectations}`
);
},
});