diff --git a/docs/API.md b/docs/API.md
index 01c7b7de5..588e857b4 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -384,4 +384,4 @@ expect(submitButtons).toHaveLength(3); // expect 3 elements
## `act`
-Useful function to help testing components that use hooks API. By default any `render` and `fireEvent` calls are wrapped by this function, so there is no need to wrap it manually. This method is re-exported from [`react-test-renderer`](https://github.com/facebook/react/blob/master/packages/react-test-renderer/src/ReactTestRenderer.js#L567]).
+Useful function to help testing components that use hooks API. By default any `render`, `update`, and `fireEvent` calls are wrapped by this function, so there is no need to wrap it manually. This method is re-exported from [`react-test-renderer`](https://github.com/facebook/react/blob/master/packages/react-test-renderer/src/ReactTestRenderer.js#L567]).
diff --git a/src/__tests__/act.test.js b/src/__tests__/act.test.js
index db29ea4f3..67f22ab74 100644
--- a/src/__tests__/act.test.js
+++ b/src/__tests__/act.test.js
@@ -28,6 +28,14 @@ test('render should trigger useEffect', () => {
expect(effectCallback).toHaveBeenCalledTimes(1);
});
+test('update should trigger useEffect', () => {
+ const effectCallback = jest.fn();
+ const { update } = render();
+ update();
+
+ expect(effectCallback).toHaveBeenCalledTimes(2);
+});
+
test('fireEvent should trigger useState', () => {
const { getByTestId } = render();
const counter = getByTestId('counter');
diff --git a/src/render.js b/src/render.js
index 147175427..b68690fca 100644
--- a/src/render.js
+++ b/src/render.js
@@ -26,7 +26,7 @@ export default function render(
return {
...getByAPI(instance),
...queryByAPI(instance),
- update: renderer.update,
+ update: updateWithAct(renderer),
unmount: renderer.unmount,
toJSON: renderer.toJSON,
debug: debug(instance, renderer),
@@ -46,6 +46,14 @@ function renderWithAct(
return ((renderer: any): ReactTestRenderer);
}
+function updateWithAct(renderer: ReactTestRenderer) {
+ return function(component: React.Element) {
+ act(() => {
+ renderer.update(component);
+ });
+ };
+}
+
function debug(instance: ReactTestInstance, renderer) {
function debugImpl(message?: string) {
return debugDeep(renderer.toJSON(), message);