mirror of
https://github.com/facebook/react.git
synced 2026-02-26 18:58:05 +00:00
* Adjust some expectations of the server markup format of Fiber Currently this case is using the stack renderer. * Ensure debug hooks are injected into the Stack server renderer In our tests this normally happens because ReactDOM.js injects them into the shared module, but when Fiber is enabled or this is its own flat bundle, that doesn't happen. * Add package builds for new server renderer and enable tests ReactServer -> ReactDOMServerStream This file is going to be the replacement for ReactDOMServer. I mock ReactDOMServer and user ReactDOMServerStream when we have the fiber flag enabled. I'm now also enabling this as the default for distributions builds (react-dom/server on npm and react-dom-server.production.min.js as umd bundle). I'm using traverseStackChildren instead of traverseAllChildren because traverseAllChildren is now only in the isomorphic package and we don't want to build all of that that into the server package. I also have to require lower case react for the builds to work.
107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
// We want to globally mock this but jest doesn't let us do that by default
|
|
// for a file that already exists. So we have to explicitly mock it.
|
|
jest.mock('ReactDOM');
|
|
jest.mock('ReactDOMServer');
|
|
jest.mock('ReactNative');
|
|
jest.mock('ReactDOMFeatureFlags', () => {
|
|
const flags = require.requireActual('ReactDOMFeatureFlags');
|
|
return Object.assign({}, flags, {
|
|
useFiber: false || !!process.env.REACT_DOM_JEST_USE_FIBER,
|
|
});
|
|
});
|
|
jest.mock('ReactFeatureFlags', () => {
|
|
const flags = require.requireActual('ReactFeatureFlags');
|
|
return Object.assign({}, flags, {
|
|
disableNewFiberFeatures: true,
|
|
});
|
|
});
|
|
jest.mock('ReactNativeFeatureFlags', () => {
|
|
const flags = require.requireActual('ReactNativeFeatureFlags');
|
|
return Object.assign({}, flags, {
|
|
useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER,
|
|
});
|
|
});
|
|
jest.mock('ReactTestRendererFeatureFlags', () => {
|
|
const flags = require.requireActual('ReactTestRendererFeatureFlags');
|
|
return Object.assign({}, flags, {
|
|
useFiber: flags.useFiber || !!process.env.REACT_DOM_JEST_USE_FIBER,
|
|
});
|
|
});
|
|
|
|
// Error logging varies between Fiber and Stack;
|
|
// Rather than fork dozens of tests, mock the error-logging file by default.
|
|
jest.mock('ReactFiberErrorLogger');
|
|
|
|
var env = jasmine.getEnv();
|
|
|
|
var callCount = 0;
|
|
var oldError = console.error;
|
|
var newError = function() {
|
|
callCount++;
|
|
oldError.apply(this, arguments);
|
|
};
|
|
|
|
console.error = newError;
|
|
|
|
env.beforeEach(() => {
|
|
callCount = 0;
|
|
jasmine.addMatchers({
|
|
toBeReset() {
|
|
return {
|
|
compare(actual) {
|
|
// TODO: Catch test cases that call spyOn() but don't inspect the mock
|
|
// properly.
|
|
if (actual !== newError && !jasmine.isSpy(actual)) {
|
|
return {
|
|
pass: false,
|
|
message: 'Test did not tear down console.error mock properly.',
|
|
};
|
|
}
|
|
return {pass: true};
|
|
},
|
|
};
|
|
},
|
|
toNotHaveBeenCalled() {
|
|
return {
|
|
compare(actual) {
|
|
return {
|
|
pass: callCount === 0,
|
|
message: 'Expected test not to warn. If the warning is expected, mock ' +
|
|
"it out using spyOn(console, 'error'); and test that the " +
|
|
'warning occurs.',
|
|
};
|
|
},
|
|
};
|
|
},
|
|
});
|
|
});
|
|
env.afterEach(() => {
|
|
expect(console.error).toBeReset();
|
|
expect(console.error).toNotHaveBeenCalled();
|
|
});
|
|
|
|
function wrapDevMatcher(obj, name) {
|
|
const original = obj[name];
|
|
obj[name] = function devMatcher() {
|
|
try {
|
|
original.apply(this, arguments);
|
|
} catch (e) {
|
|
global.__hadDevFailures = e.stack;
|
|
}
|
|
};
|
|
}
|
|
|
|
const expectDev = function expectDev(actual) {
|
|
const expectation = expect(actual);
|
|
if (global.__suppressDevFailures) {
|
|
Object.keys(expectation).forEach(name => {
|
|
wrapDevMatcher(expectation, name);
|
|
wrapDevMatcher(expectation.not, name);
|
|
});
|
|
}
|
|
return expectation;
|
|
};
|
|
global.expectDev = expectDev;
|