Тестирование с React Apollo игнорирует переменные - PullRequest
1 голос
/ 29 июня 2019

У меня довольно простая тестовая установка, очень похожая на ту, которая поставляется с репозиторием от 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
            }
        }
    }
`;

И я никогда не смогу сопоставить фиктивный результат с запросом, использующим переменные, экспортированные из кэша клиента. Но это, вероятно, будет следующий вопрос после того, как я решу «более простую» проблему.

...