Ложные запросы Аполлона внутри testcafe - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я использую testcafe для моих тестов e2e.

Поскольку testcafe не поддерживает асинхронный код c, я должен смоделировать мои запросы к GraphQL.

Есть ли какой-либо другой способ, кроме использования RequestMock функции?

Это не очень удобно для разработчиков, поскольку оно сильно сфокусировано на REST ?

РЕДАКТИРОВАТЬ:

Относительно Тот факт, что я тестирую, не позволяет использовать асин c код, вот некоторые детали: функция setBody теряется, если я пытаюсь использовать асин c код (запрашивать реальные данные). Существует проблема здесь

const handler = async (req, res) => {


 // ok
  res.setBody('foobar')
  data = await Promise.resolve({ some: 'data' })
  // setBody is no longer defined
  res.setBody(JSON.stringify(data))
}
fixture('Register')
.page('http://foobar/register')
.requestHook(handler)

РЕДАКТИРОВАТЬ 2:

Я добавил два файла, которые я сейчас использую.

Пожалуйста, посмотрите на apolloHook. js непосредственно перед экспортом по умолчанию

// apolloHook.js
import { RequestMock } from 'testcafe'
import fetch from 'node-fetch'
import gql from 'graphql-tag'
import configureApolloClient from '../../../src/ApolloClient'
const urlToCatch = 'http://127.0.0.1/index.php/graphql/'
const client = configureApolloClient({
  uri: 'http://nginx/index_test.php/graphql/',
  fetch
})
const handler = async (req, res) => {
  const body = JSON.parse(req.body.toString('utf8'))
  const query = gql`${body.query}`
  const { variables } = body
  let data = null
  if (body.query.startsWith('query')) {
    data = await client.query({ query, variables })
  } else {
    data = await client.mutate({ mutation: query, variables })
  }

  // res.setBody is undefined !

  res.setBody(JSON.stringify(data))
}
export default RequestMock()
  .onRequestTo({ url: urlToCatch, method: 'POST' })
  .respond(handler)
// register.js
import { Selector } from 'testcafe'
import { REGISTER_FIXTURES } from '../fixtures'
import { testInput, testPhoneInput, testCountryInput, testCountriesInput, testSelect } from '../utils/utils'
import apolloHook from '../utils/apolloHook'
const registerUrl = 'http://front:3000'
//Uncomment for local testing
//const registerUrl = 'http://127.0.0.1:3000'
fixture('Register')
  .page(registerUrl)
  .requestHooks(apolloHook)
test('Fill out sign up', async t => {
  await testInput(t, Selector('[data-testid=\'email\']'), 'john.doe@professional.com')
  await t
    .click(Selector('[data-testid=\'send-me-a-code\']'))
    .expect(Selector('[data-testid=\'one-time-password-button\']').innerText).eql('Submit')
})
...