mirror of
https://github.com/facebook/react.git
synced 2026-02-26 18:58:05 +00:00
* Swap expect(ReactNoop) for expect(Scheduler) In the previous commits, I upgraded our custom Jest matchers for the noop and test renderers to use Scheduler under the hood. Now that all these matchers are using Scheduler, we can drop support for passing ReactNoop and test roots and always pass Scheduler directly. * Externalize Scheduler in noop and test bundles I also noticed we don't need to regenerator runtime in noop anymore.
47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const JestReact = require('jest-react');
|
|
const SchedulerMatchers = require('./schedulerTestMatchers');
|
|
|
|
function captureAssertion(fn) {
|
|
// Trick to use a Jest matcher inside another Jest matcher. `fn` contains an
|
|
// assertion; if it throws, we capture the error and return it, so the stack
|
|
// trace presented to the user points to the original assertion in the
|
|
// test file.
|
|
try {
|
|
fn();
|
|
} catch (error) {
|
|
return {
|
|
pass: false,
|
|
message: () => error.message,
|
|
};
|
|
}
|
|
return {pass: true};
|
|
}
|
|
|
|
function assertYieldsWereCleared(Scheduler) {
|
|
const actualYields = Scheduler.unstable_clearYields();
|
|
if (actualYields.length !== 0) {
|
|
throw new Error(
|
|
'Log of yielded values is not empty. ' +
|
|
'Call expect(Scheduler).toHaveYielded(...) first.'
|
|
);
|
|
}
|
|
}
|
|
|
|
function toMatchRenderedOutput(ReactNoop, expectedJSX) {
|
|
if (typeof ReactNoop.getChildrenAsJSX === 'function') {
|
|
const Scheduler = ReactNoop._Scheduler;
|
|
assertYieldsWereCleared(Scheduler);
|
|
return captureAssertion(() => {
|
|
expect(ReactNoop.getChildrenAsJSX()).toEqual(expectedJSX);
|
|
});
|
|
}
|
|
return JestReact.unstable_toMatchRenderedOutput(ReactNoop, expectedJSX);
|
|
}
|
|
|
|
module.exports = {
|
|
...SchedulerMatchers,
|
|
toMatchRenderedOutput,
|
|
};
|