Можно ли делать запросы API для настройки тестов в Cypress при тестировании бессерверных приложений? - PullRequest
0 голосов
/ 18 марта 2019

Я пишу приложение React без сервера, используя AWS Amplify.Я делаю свои тесты E2E, используя Cypress.

Перед каждым тестом я регистрирую пользователя через CLI AWS Amplify.После этого я очищаю все данные на сервере разработки и создаю новые данные с помощью приспособлений.Таким образом, я всегда контролировал состояние для каждого теста (см. Код ниже).

Мой вопрос: это хорошая практика?Или плохо делать столько запросов к серверу перед каждым тестом?Если это плохо, как бы вы это сделали, если у вас нет прямого доступа к серверу (опять же без сервера) для запуска таких команд, как cy.exec('npm run db:reset && npm run db:seed')?Cypress предупреждает меня об использовании обещаний:

Cypress detected that you returned a promise in a test, but also invoked one or more cy commands inside of that promise.

Вот код, который я использую:

import API, { graphqlOperation } from '@aws-amplify/api';
import Auth from '@aws-amplify/auth';
import Amplify from 'aws-amplify';
import * as R from 'ramda';

import config from '../../src/aws-exports';
import { contacts } from '../../src/contacts/fixtures';
import { replaceEmptyStringsWithNull } from '../../src/contacts/helpers';
import {
  createContact as addMutation,
  deleteContact as deleteMutation
} from '../../src/graphql/mutations';
import { listContacts } from '../../src/graphql/queries';

Amplify.configure(config);

const deleteContact = input =>
  API.graphql(graphqlOperation(deleteMutation, { input }));

const createContact = input =>
  API.graphql(graphqlOperation(addMutation, { input }));

describe('Contactlist', () => {
  beforeEach(async () => {
    await Auth.signIn(Cypress.env('email'), Cypress.env('password'));
    const allContacts = await API.graphql(graphqlOperation(listContacts));
    await Promise.all(
      R.map(
        R.pipe(
          R.prop('id'),
          id => ({ id }),
          deleteContact
        )
      )(allContacts.data.listContacts.items)
    );
    await Promise.all(
      R.map(
        R.pipe(
          R.dissoc('id'),
          replaceEmptyStringsWithNull,
          createContact
        )
      )(contacts)
    );
  });

  // ... my tests

1 Ответ

0 голосов
/ 19 марта 2019

Это был бы именно тот способ, которым я бы выполнил тест.Мне нравится начинать с полностью контролируемого состояния, даже если это означает наличие нескольких API-вызовов, как раньше ()

...