У меня довольно простая тестовая установка, очень похожая на ту, которая поставляется с репозиторием от Apollo GraphQL и описанная в их документации .
Вот запрос:
const GET_USER_WITH_SPEND_CONTROL = gql`
query GetUserWithSpendControl($userToken: ID!) {
me(token: $userToken) {
firstName
lastName
spendControl {
amountAvailable
currencyCode
}
}
}
`;
Вот тест:
const mockUserSpendControl = {
me: {
firstName: "Andrii",
lastName: "Gorishnii",
spendControl: {
amountAvailable: 1000,
currencyCode: "USD",
}
}
};
describe('Account Summary', () => {
afterEach(cleanup);
it('renders account summary', async () => {
const mocks = [
{
request: { query: GET_USER_WITH_SPEND_CONTROL },
result: {
data: mockUserSpendControl
},
},
];
const { getByText } = await renderApollo(<AccountSummary/>, {
mocks,
cache,
addTypename: false
});
await waitForElement(() => getByText(/Gorishnii/i));
});
});
В этом тесте неправильно то, что он работает, а не должен: схема GQL объявляет требуемую переменную userToken
, однако, если я добавлю ее в тест следующим образом:
...
request: { query: GET_USER_WITH_SPEND_CONTROL, variables: {userToken: "56aed"} },
...
Это на самом деле не проходит тест.
У кого-нибудь есть похожие проблемы с тестированием компонентов React Apollo?
P.S. У меня большая проблема, когда мой оригинальный запрос выглядит так:
const GET_USER_WITH_SPEND_CONTROL = gql`
query GetUserWithSpendControl($userToken: ID!) {
currentUserToken @client @export(as: "userToken")
me(token: $userToken) {
firstName
lastName
spendControl {
amountAvailable
currencyCode
}
}
}
`;
И я никогда не смогу сопоставить фиктивный результат с запросом, использующим переменные, экспортированные из кэша клиента. Но это, вероятно, будет следующий вопрос после того, как я решу «более простую» проблему.