Как смоделировать тип объединения в клиенте apollo

#reactjs #unit-testing #mocking #apollo-client #react-testing-library

#reactjs #модульное тестирование #издевательство #apollo-client #react-testing-library

Вопрос:

Я хочу протестировать клиент apollo с помощью mock provider, он корректно работает с простым запросом и мутацией. Но для изменения регистра у меня есть ответ типа

 register(data: $data) {
      ... on Error {
        error {
          path
          message
        }
      }
      ... on RegisterSuccess {
        user {
          email
          _id
          username
        }
      }
    }
  

Я издевался над этим ответом в клиенте apollo следующим образом

 const mocks = [
      {
        request: {
          query: RegisterMutation,
          variables: {
            data: {
              email: 'test',
              username: 'test',
              password: 'test',
            },
          },
        },
        result: {
          data: {
            register: {
              error: [
                {
                  path: 'email',
                  message: 'Email already in use',
                },
              ],
            },
          },
        },
      },
    ];
  

Но это не работает и выдает ошибку, которая,

 Warning: An unhandled error was caught from submitForm() Error: No more mocked responses for the query: mutation Register($data: RegisterInput!) {
      register(data: $data) {
        ... on Error {
          error {
            path
            message
          }
        }
        ... on RegisterSuccess {
          user {
            email
            _id
            username
          }
        }
      }
    }
    , variables: {"data":{"email":"","username":"","password":""}}
  

Ответ №1:

На самом деле, с моей стороны есть небольшая ошибка. Я не могу передать

 {
   email: 'test',
   username: 'test',
   password: 'test',
}
  

этот объект как данные в переменных, потому что компонент ожидает все три как пустую строку. Итак, передавая это

 {
  email: '',
  username: '',
  password: '',
}
  

решил проблему для меня.
обратитесь к этой проблеме на github для получения более подробной информации и примера