-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MockedProvider does not return mocks in a storybook. #7081
Comments
@MarkLyck Are you actually still using |
We even have a codemod to help automate the conversion of imports: https://github.com/apollographql/apollo-client/tree/main/scripts/codemods/ac2-to-ac3 |
I have the same issue with |
I find this a strange user-behaviour, but I figured it out. I was testing it with dummy data this entire time because I just wanted to see the data return "something". However, apparently if you give the mockProvider a mock that doesn't 100% match the expected schema, it will just give up and return When I replaced my dummy data, with a data matching the exact schema of my request it works corrrectly. Wasted a lot of time on this detail. Please consider adding an error or warning if the mock doesn't match the expected return, if this is the intended behaviour. P.S. |
See benjamn/wryware#21 for explanation and motivation. Should help with #6771, #6803, #6688, #6378, and #7081, and possibly other regressions that began in @apollo/[email protected].
See benjamn/wryware#21 for explanation and motivation. Should help with #6771, #6803, #6688, #6378, and #7081, and possibly other regressions that began in @apollo/[email protected].
This behavior should be fixed/improved in |
@benjamn Can second that. This behavior is still the same with |
I am having this issue right now and it's very difficult to debug what I need to do to return my data. If I change my mocks to use a function to return the result, I can see it's running.
|
Having the same issue. As a workaround you may set the fetchPolicy == "no-cache" in the useQuery options:
|
Getting same issue with |
Also found that if the nested mock response does not include |
I think this may be related. Regarding With the following query: const SIMPLE_QUERY = gql`
{
a {
b
}
}
`; and testing the following hook: const useSimpleHook = () => {
const { data, loading, error } = useQuery(SOME_QUERY);
return { data, loading, error };
}; when
I thought from this explanation in the docs that setting I should also say that the majority of issues during testing had to do with the cache not being reset on every test. |
Getting the same issue with |
sorry, any updates here? |
I'm also running into issues getting MockedProvider to do anything. I've looked at the queries for some time and it's always just returning |
It is like @MarkLyck suggested. If your schema-Mock does not match what the |
I had this exact issue which this fixes, but I don't want to have to refetch my user both on the server and then again in the component, is there another work around for this? Edit: After a lot of searching there's a work around adding
|
v3.3.11, the same problem. None of the solutions mentioned above helped. Did someone manage to solve this problem differently? |
@marcin-piechaczek can you provide a testable Version of what you're working with? I'd love to take a look. |
Hi @bastianwegge, thanks for the reply. I noticed that this problem must be somewhere on my side because I cannot reproduce this problem on a mocked project. I will double-check my config and let you know. |
@benjamn I guess this issue can be closed then, the original issue-creator was satisfied in September 2020 (#7081 (comment)) |
In my case, the SSR turned out to be the problem. I fetch the data on the server-side, then read it from the client-side cache and between the data was undefined. I solved this problem by adding a loading state that satisfies mockProvider. Stack: Nextjs + apollo + storybook (stories with apollo hook useQuery was undefined). |
Same issue here. A mock call had bit-rotted and broke a story due to a missing query in an updated GraphQL operation. I updated @apollo/client to latest (3.3.13), but still no sensible error message: just loading false, error undefined, data undefined. This is super unhelpful--an error warning of invalid mocks would be much more useful here. |
Not sure if this is the issue others had, but after hours and hours I finally figured out our issue. Our mocks were not providing arrays (that were typed as optional), by just adding empty arrays for those properties in the mocks, finally the response is as expected. a) this seems like a bug EDIT: Turns out any prop missing (incl any optional props) is causing our data to be undefined. Our stop gap is to use this type
applied to our fragments to enforce that all props are present |
I have the same issue with I have added |
While Instead, I took the advice from https://levelup.gitconnected.com/gotchas-using-react-apollo-mockprovider-ec2a22a07e76:
Using that technique, I was able to fix some subtle problems in my mocked responses which had been breaking my test, and I no longer needed to rely on |
@tarehart Thanks for this link. It's very helpful. I have added __typename to the mocks as I use fragments in queries. |
I've tried everything on this list, but no success still. Testing on React Native. |
Solution Number 3 of your link is what fixed it for me. |
This is something which needs to be improved. For example, another scenario is when the MockedQuery should contain variables. This returns undefined: const mockedQuery = {
request: {
query: MY_QUERY,
variables: {
example: "someString",
},
},
.
.
.
} but this works fine: const mockedQuery = {
request: {
query: MY_QUERY,
variables: {
example: "",
},
},
.
.
.
} This is ridiculous that "variables" values may cause that the whole data in a test is undefined. |
Please throw an error when mismatched mock shape causes NO MOCK DATA AT ALL to be supplied. That seems like an important requirement for a test component. |
tried every solution but it does not work |
In my case I had to wait so the request could resolve import { MockedProvider } from '@apollo/client/testing';
import { act, render, screen } from '@testing-library/react';
beforeEach(async () => {
render(...)
await act(async () => {
await new Promise((resolve) => setTimeout(resolve, 0));
});
}); |
the solution for me without changing cache type on the react component, was to add |
I've added __typename field to my mock entities and it works, thanks all! |
Indeed throwing, an ideally meaningful, error will be the safest thing to do |
Just tagging this RFC as it's related #9738 |
Was facing the same issue. I am using The trick is to wrap import { act, render, screen } from '@testing-library/react';
import { MockedProvider, MockedResponse } from '@apollo/client/testing';
const mocks: MockedResponse[] = [
{
request: { ... },
response: { ... },
}
]
describe('Test cases', () => {
it('One of the test case', async () => {
await act(async () => { <<======= THIS LINE
render(
<MockedProvider mocks={mocks} addTypename={false}>
<MyComponent />
</MockedProvider>
);
});
// Assert on any condition.
expect(screen.getByTestId(...)).not.toBeNull();
});
}); |
I have the same issue (not only in a storybook, but just in my tests). Could anyone from core team pay attention to this issue? It's been 3 years since the bug appeared For me works two solutions:
|
Intended outcome:
The MockedProvider should work in a storybook environment and return the mock request provided to the MockProvider as per the docs: https://www.apollographql.com/docs/react/api/react/testing/#mockedprovider
Actual outcome:
When running a story with MockedProvider, the useQuery hook returns:
then it returns:
It does not return the mock I provided in my story
How to reproduce the issue:
Here is my story.tsx file
I tried both with and without
addTypename={false}
I made my component as simple as possible to troubleshoot, but it doesn't work even when simplified down to the smallest possible react component.
component:
Even with the simplest possible setup, this does not work.
Lastly here is my query:
I've doubled checked that the query console logs correctly and the same in both the story and the actual component.
Versions
System:
OS: macOS 10.15.6
Binaries:
Node: 14.4.0 - /usr/local/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.14.5 - /usr/local/bin/npm
Browsers:
Chrome: 85.0.4183.121
Firefox: 81.0
Safari: 14.0
npmPackages:
@apollo/client: ^3.2.1 => 3.2.1
apollo-boost: ^0.4.9 => 0.4.9
apollo-link: ^1.2.14 => 1.2.14
apollo-link-batch-http: ^1.2.14 => 1.2.14
apollo-link-context: ^1.0.20 => 1.0.20
apollo-link-error: ^1.1.13 => 1.1.13
apollo-utilities: ^1.3.4 => 1.3.4
The text was updated successfully, but these errors were encountered: