我正在使用AWS Amplify编写无服务器的React应用程序。我使用赛普拉斯进行了E2E测试。
在每次测试之前,我通过AWS Amplify CLI登录用户。然后,我清除开发服务器上的所有数据,并使用fixture来创建一些新数据。这样我每次测试都有控制状态(见下面的代码)。
我的问题是:这是一个好习惯吗?或者在每次测试之前对服务器发出那么多请求是不是很糟糕?如果它不好,如果你没有直接访问服务器(再次无服务器)来运行像cy.exec('npm run db:reset && npm run db:seed')
这样的命令,你会怎么做?赛普拉斯确实在控制台中警告我使用承诺:
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
这将是我进行测试的方式。我喜欢从一个完全受控的状态开始,即使这意味着有多个API调用作为before()