From 713ddf6ba9357fbaf57a3244d7f079f5b7277ce8 Mon Sep 17 00:00:00 2001 From: Sergey Sidorchik Date: Tue, 2 Oct 2018 14:29:38 -0700 Subject: [PATCH 1/2] feat(testing): add renderWithTheme --- packages/testing/src/index.js | 1 + .../src/utils/renderWithTheme.example.md | 21 +++++++++++++++ packages/testing/src/utils/renderWithTheme.js | 26 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 packages/testing/src/utils/renderWithTheme.example.md create mode 100644 packages/testing/src/utils/renderWithTheme.js diff --git a/packages/testing/src/index.js b/packages/testing/src/index.js index 301e5ced83a..dc5c976f8ac 100644 --- a/packages/testing/src/index.js +++ b/packages/testing/src/index.js @@ -6,4 +6,5 @@ */ export { default as mountWithTheme } from './utils/mountWithTheme.js'; +export { default as renderWithTheme } from './utils/renderWithTheme.js'; export { default as shallowWithTheme } from './utils/shallowWithTheme.js'; diff --git a/packages/testing/src/utils/renderWithTheme.example.md b/packages/testing/src/utils/renderWithTheme.example.md new file mode 100644 index 00000000000..4d769cc1f4c --- /dev/null +++ b/packages/testing/src/utils/renderWithTheme.example.md @@ -0,0 +1,21 @@ +Signature: + +- `renderWithTheme(reactNode, { rtl: boolean, theme: object, enzymeOptions: object })` + +```jsx static +import { Tabs, TabPanel } from '@zendeskgarden/react-tabs'; +import { renderWithTheme } from '@zendeskgarden/react-testing'; + +const TabsExample = ( + + + Tab 1 content + + + Tab 2 content + + +); + +const RtlTabs = renderWithTheme(TabsExample, { rtl: true }); +``` diff --git a/packages/testing/src/utils/renderWithTheme.js b/packages/testing/src/utils/renderWithTheme.js new file mode 100644 index 00000000000..ec98a74d318 --- /dev/null +++ b/packages/testing/src/utils/renderWithTheme.js @@ -0,0 +1,26 @@ +/** + * Copyright Zendesk, Inc. + * + * Use of this source code is governed under the Apache License, Version 2.0 + * found at http://www.apache.org/licenses/LICENSE-2.0. + */ + +import React from 'react'; +import { mount, render } from 'enzyme'; +import { ThemeProvider } from '@zendeskgarden/react-theming'; + +/** + * Render a component with provided RTL and Theme + * @param {EnzymeWrapper} tree + * @param {Object} ThemeProperties { rtl: boolean, theme: object, enzymeOptions: object } + */ +const renderWithTheme = (tree, { rtl, theme, enzymeOptions } = {}) => { + const context = mount() + .childAt(0) + .instance() + .getChildContext(); + + return render(tree, { context }, enzymeOptions); +}; + +export default renderWithTheme; From a53e9ccd2e1c1684498295f8d0d990002a881195 Mon Sep 17 00:00:00 2001 From: Sergey Sidorchik Date: Wed, 3 Oct 2018 12:08:18 -0700 Subject: [PATCH 2/2] Pass childContextTypes option into render --- packages/testing/src/utils/renderWithTheme.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/testing/src/utils/renderWithTheme.js b/packages/testing/src/utils/renderWithTheme.js index ec98a74d318..9829d9ae523 100644 --- a/packages/testing/src/utils/renderWithTheme.js +++ b/packages/testing/src/utils/renderWithTheme.js @@ -7,6 +7,7 @@ import React from 'react'; import { mount, render } from 'enzyme'; +import { ThemeProvider as StyledThemeProvider } from 'styled-components'; import { ThemeProvider } from '@zendeskgarden/react-theming'; /** @@ -20,7 +21,11 @@ const renderWithTheme = (tree, { rtl, theme, enzymeOptions } = {}) => { .instance() .getChildContext(); - return render(tree, { context }, enzymeOptions); + return render( + tree, + { context, childContextTypes: StyledThemeProvider.childContextTypes }, + enzymeOptions + ); }; export default renderWithTheme;