forked from facebook/react
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathReactOwnerStacks-test.js
More file actions
88 lines (76 loc) · 1.92 KB
/
ReactOwnerStacks-test.js
File metadata and controls
88 lines (76 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @emails react-core
* @jest-environment node
*/
'use strict';
let React;
let ReactNoop;
let act;
describe('ReactOwnerStacks', () => {
beforeEach(function () {
jest.resetModules();
React = require('react');
ReactNoop = require('react-noop-renderer');
act = require('internal-test-utils').act;
});
function normalizeCodeLocInfo(str) {
return (
str &&
str.replace(/\n +(?:at|in) ([\S]+)[^\n]*/g, function (m, name) {
return '\n in ' + name + ' (at **)';
})
);
}
it('behavior in production', () => {
if (!__DEV__) {
if (gate('fb')) {
expect(React).toHaveProperty('captureOwnerStack', undefined);
} else {
expect(React).not.toHaveProperty('captureOwnerStack');
}
}
});
// @gate __DEV__ && enableOwnerStacks
it('can get the component owner stacks during rendering in dev', async () => {
let stack;
function Foo() {
return <Bar />;
}
function Bar() {
return (
<div>
<Baz />
</div>
);
}
function Baz() {
stack = React.captureOwnerStack();
return <span>hi</span>;
}
await act(() => {
ReactNoop.render(
<div>
<Foo />
</div>,
);
});
expect(normalizeCodeLocInfo(stack)).toBe(
'\n in Bar (at **)' + '\n in Foo (at **)',
);
});
it('returns null outside of render', async () => {
// Awkward to gate since some builds will have `captureOwnerStack` return null in prod
if (__DEV__ && gate('enableOwnerStacks')) {
expect(React.captureOwnerStack()).toBe(null);
await act(() => {
ReactNoop.render(<div />);
});
expect(React.captureOwnerStack()).toBe(null);
}
});
});