Skip to content

Commit

Permalink
fix: Poll fetches while testing should be wrapped in act (#268)
Browse files Browse the repository at this point in the history
  • Loading branch information
ntucker committed Feb 17, 2020
1 parent 11a0510 commit 9c264bb
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 13 deletions.
@@ -1,5 +1,6 @@
import React from 'react';
import nock from 'nock';
import { act } from '@testing-library/react-hooks';
import {
CoolerArticleResource,
ArticleResource,
Expand Down Expand Up @@ -104,7 +105,7 @@ for (const makeProvider of [makeCacheProvider, makeExternalCacheProvider]) {
expect(result.current instanceof CoolerArticleResource).toBe(true);
expect(result.current.title).toBe(payload.title);

await del(payload);
await act(() => del(payload));
expect(result.error).toBeDefined();
expect((result.error as any).status).toBe(404);
});
Expand Down
3 changes: 1 addition & 2 deletions packages/test/src/index.ts
@@ -1,11 +1,10 @@
import { MockNetworkManager } from './managers';
import makeRenderRestHook from './makeRenderRestHook';
import { makeExternalCacheProvider, makeCacheProvider } from './providers';
import MockProvider from './MockProvider';
import mockInitialState from './mockState';
export * from './managers';

export {
MockNetworkManager,
makeRenderRestHook,
makeExternalCacheProvider,
makeCacheProvider,
Expand Down
12 changes: 3 additions & 9 deletions packages/test/src/makeRenderRestHook.tsx
@@ -1,14 +1,8 @@
import React from 'react';
import { renderHook, RenderHookOptions } from '@testing-library/react-hooks';
import { State, SubscriptionManager, Manager } from 'rest-hooks';

import {
State,
SubscriptionManager,
PollingSubscription,
Manager,
} from 'rest-hooks';

import { MockNetworkManager } from './managers';
import { MockNetworkManager, MockPollingSubscription } from './managers';
import mockInitialState, { Fixture } from './mockState';

export default function makeRenderRestHook(
Expand All @@ -18,7 +12,7 @@ export default function makeRenderRestHook(
) => React.ComponentType<{ children: React.ReactChild }>,
) {
const manager = new MockNetworkManager();
const subManager = new SubscriptionManager(PollingSubscription);
const subManager = new SubscriptionManager(MockPollingSubscription);
function renderRestHook<P, R>(
callback: (props: P) => R,
options?: {
Expand Down
11 changes: 10 additions & 1 deletion packages/test/src/managers.ts
@@ -1,10 +1,10 @@
import { act } from '@testing-library/react-hooks';

import {
NetworkManager,
FetchAction,
ReceiveAction,
Dispatch,
PollingSubscription,
} from 'rest-hooks';

export class MockNetworkManager extends NetworkManager {
Expand All @@ -24,3 +24,12 @@ export class MockNetworkManager extends NetworkManager {
});
}
}

export class MockPollingSubscription extends PollingSubscription {
/** Trigger request for latest resource */
protected update() {
act(() => {
super.update();
});
}
}

0 comments on commit 9c264bb

Please sign in to comment.