Я пишу приложение 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