diff --git a/frontend/packages/app/package.json b/frontend/packages/app/package.json
index 88a902be5d..55f747560a 100644
--- a/frontend/packages/app/package.json
+++ b/frontend/packages/app/package.json
@@ -18,9 +18,7 @@
"@types/react-dom": "^16.9.0",
"@types/react-router-dom": "^5.1.3",
"@types/zen-observable": "^0.8.0",
- "classnames": "^2.2.6",
"cross-env": "^7.0.0",
- "rc-progress": "^2.5.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-router-dom": "^5.1.2",
diff --git a/frontend/packages/core/package.json b/frontend/packages/core/package.json
index d7265591eb..57f938c2a8 100644
--- a/frontend/packages/core/package.json
+++ b/frontend/packages/core/package.json
@@ -15,6 +15,8 @@
"@types/react": "^16.9.0",
"@types/react-dom": "^16.9.0",
"@types/react-router-dom": "^5.1.3",
+ "classnames": "^2.2.6",
+ "rc-progress": "^2.5.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-helmet": "5.2.1",
diff --git a/frontend/packages/core/src/components/CircleProgress.test.js b/frontend/packages/core/src/components/CircleProgress.test.js
index 3ddce62e69..3eaa1828ec 100644
--- a/frontend/packages/core/src/components/CircleProgress.test.js
+++ b/frontend/packages/core/src/components/CircleProgress.test.js
@@ -1,7 +1,7 @@
import React from 'react';
import { render } from '@testing-library/react';
import { wrapInThemedTestApp } from '../testUtils';
-import CircleProgress from '@backstage/core';
+import CircleProgress from './CircleProgress';
//import { COLORS, V1 } from 'core/app/Themes';
describe('', () => {
diff --git a/frontend/packages/core/src/components/HorizontalScrollGrid.test.js b/frontend/packages/core/src/components/HorizontalScrollGrid.test.js
index b5acd17fb4..1ce72dca49 100644
--- a/frontend/packages/core/src/components/HorizontalScrollGrid.test.js
+++ b/frontend/packages/core/src/components/HorizontalScrollGrid.test.js
@@ -1,7 +1,7 @@
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { renderWithEffects, wrapInThemedTestApp } from '../testUtils';
-import HorizontalScrollGrid from 'shared/components/HorizontalScrollGrid';
+import HorizontalScrollGrid from './HorizontalScrollGrid';
import { Grid } from '@material-ui/core';
describe('', () => {
diff --git a/frontend/packages/core/src/components/HorizontalScrollGrid.tsx b/frontend/packages/core/src/components/HorizontalScrollGrid.tsx
index d23f60e0c6..f7e0c99f65 100644
--- a/frontend/packages/core/src/components/HorizontalScrollGrid.tsx
+++ b/frontend/packages/core/src/components/HorizontalScrollGrid.tsx
@@ -1,9 +1,8 @@
import React, { FC } from 'react';
import classNames from 'classnames';
-import { makeStyles, Theme } from '@material-ui/core/styles';
import ChevronLeftIcon from '@material-ui/icons/ChevronLeft';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
-import { Grid, IconButton } from '@material-ui/core';
+import { Grid, IconButton, makeStyles, Theme } from '@material-ui/core';
// Generated with https://larsenwork.com/easing-gradients/
const fadeGradient = `
@@ -34,7 +33,7 @@ type Props = {
minScrollDistance?: number; // limits how small steps the scroll can take in px
};
-const useStyles = makeStyles(theme => ({
+const useStyles = makeStyles(theme => ({
root: {
position: 'relative',
display: 'flex',
@@ -43,7 +42,7 @@ const useStyles = makeStyles(theme => ({
},
container: {
overflow: 'auto',
- scrollbarWidth: 0, // hide in FF
+ scrollbarWidth: 0 as any, // hide in FF
'&::-webkit-scrollbar': {
display: 'none', // hide in Chrome
},
diff --git a/frontend/packages/core/src/testUtils/index.js b/frontend/packages/core/src/testUtils/index.js
index 99e94c624d..9e5506e0b7 100644
--- a/frontend/packages/core/src/testUtils/index.js
+++ b/frontend/packages/core/src/testUtils/index.js
@@ -10,6 +10,8 @@ import { Route } from 'react-router-dom';
import { V1 } from '../theme/BackstageTheme';
import ErrorBoundary from '../layout/ErrorBoundary';
+import { act } from 'react-dom/test-utils';
+import { render } from '@testing-library/react';
export { default as Keyboard } from './Keyboard';
export { default as mockBreakpoint } from './mockBreakpoint';
@@ -34,3 +36,16 @@ export function wrapInThemedTestApp(component, initialRouterEntries) {
export const wrapInTheme = (component, theme = V1) => (
{component}
);
+
+// Components using useEffect to perform an asynchronous action (such as fetch) must be rendered within an async
+// act call to properly get the final state, even with mocked responses. This utility method makes the signature a bit
+// cleaner, since act doesn't return the result of the evaluated function.
+// https://github.com/testing-library/react-testing-library/issues/281
+// https://github.com/facebook/react/pull/14853
+export async function renderWithEffects(nodes) {
+ let value;
+ await act(async () => {
+ value = await render(nodes);
+ });
+ return value;
+}