mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
This PR introduces adds `react/testing` and `react-dom/testing`. - changes infra to generate these builds - exports act on ReactDOM in these testing builds - uses the new test builds in fixtures/dom In the next PR - - I'll use the new builds for all our own tests - I'll replace usages of TestUtils.act with ReactDOM.act.
49 lines
1.8 KiB
JavaScript
49 lines
1.8 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.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
let didWarnAboutMessageChannel = false;
|
|
let enqueueTaskImpl = null;
|
|
|
|
export default function enqueueTask(task: () => void) {
|
|
if (enqueueTaskImpl === null) {
|
|
try {
|
|
// read require off the module object to get around the bundlers.
|
|
// we don't want them to detect a require and bundle a Node polyfill.
|
|
let requireString = ('require' + Math.random()).slice(0, 7);
|
|
let nodeRequire = module && module[requireString];
|
|
// assuming we're in node, let's try to get node's
|
|
// version of setImmediate, bypassing fake timers if any.
|
|
enqueueTaskImpl = nodeRequire('timers').setImmediate;
|
|
} catch (_err) {
|
|
// we're in a browser
|
|
// we can't use regular timers because they may still be faked
|
|
// so we try MessageChannel+postMessage instead
|
|
enqueueTaskImpl = function(callback: () => void) {
|
|
if (__DEV__) {
|
|
if (didWarnAboutMessageChannel === false) {
|
|
didWarnAboutMessageChannel = true;
|
|
if (typeof MessageChannel === 'undefined') {
|
|
console.error(
|
|
'This browser does not have a MessageChannel implementation, ' +
|
|
'so enqueuing tasks via await act(async () => ...) will fail. ' +
|
|
'Please file an issue at https://github.com/facebook/react/issues ' +
|
|
'if you encounter this warning.',
|
|
);
|
|
}
|
|
}
|
|
}
|
|
const channel = new MessageChannel();
|
|
channel.port1.onmessage = callback;
|
|
channel.port2.postMessage(undefined);
|
|
};
|
|
}
|
|
}
|
|
return enqueueTaskImpl(task);
|
|
}
|