Транспортер E2E - Как управлять базой данных?
В настоящее время я полагаюсь на стек Node + Angular и использую Karma и Protractor для тестирования.
В настоящее время мне сложно понять, как обрабатывать тесты E2E, которые создают и редактируют данные, а также необходимость загрузки ожидаемых данных.
Поиск google открывает множество различных пользовательских методов. Я часто читаю "вам нужно настроить свои данные" или "просто создать макет", не вдаваясь в подробности об общем процессе. Другие вкладывали слишком много накладных расходов в создании совершенно нового макетного модуля с нуля.
Я просто хотел бы знать, как люди сейчас это делают, и есть ли стандарт для этого? Или люди склонны просто издеваться над внутренним концом? Издевательство над контентом не кажется простым, как в Карме, поскольку вы в области браузера.
Я, как и ожидалось, использовал MongoDB, поэтому было бы неплохо получить какое-то направление в отношении того, что другие делают в этом сценарии. Особенно автоматизированная загрузка светильников и очистка базы данных через Protractor была бы хорошей.
Ответы
Ответ 1
Транспортир предназначен только для тестирования e2e. это означает, что он не имеет ничего общего с вашей базой данных. вы можете использовать бегун задачи (например, grunt или gulp) для очистки и заполнения вашей базы данных, после чего пусть бегун задачи запускает ваши тесты транспортира (я никогда не делал последнего, но я думаю, что это возможно). хорошо, я знаю, что это не тот ответ, на который вы стремились, но, возможно, я мог бы указать вам в правильном направлении.
Ответ 2
Вы можете управлять своей базой данных через REST API (веб-сервис).
Я хочу показать пример, как удалить пользователя из базы данных, используя веб-сервис с транспортиром.
В моем примере я использую Oracle в качестве базы данных.
class OracleDatabaseAccess {
private readonly BASE_API_URL: string = browser.params.someUrlToYourRest;
public request<T>(query: string): promise.Promise<T[]> {
return this.get<T[]>(this.BASE_API_URL, 'sql?query=' + this.fixQuery(query));
}
public update<T>(query: string): promise.Promise<T[]> {
return this.get<T[]>(this.BASE_API_URL, 'update?query=' + this.fixQuery(query));
}
public get<T>(url: string, path: string): promise.Promise<T> {
const http = new HttpClient(url);
http.failOnHttpError = true;
const responsePromise: ResponsePromise = http.get(path);
return responsePromise.body.then(body => {
return JSON.parse(body.toString());
}) as promise.Promise<T>;
}
private fixQuery(query: string): string {
if (query.includes('%')) {
query = query.split('%').join('%25');
}
if (query.includes(';')) {
query = query.replace(';', '');
}
return query;
}
}
class Queries {
private oracleDataBaseAccess: OracleDatabaseAccess = new OracleDatabaseAccess();
deleteUser(userId: string): promise.Promise<{}> {
return this.oracleDataBaseAccess.update('delete from users where userId='${userId}'');
}
}
С помощью метода request
вы можете выбирать записи из базы данных. Также, используя метод update
, вы можете вставить данные.
Вы можете использовать Queries
в describe
в beforeAll
или afterAll
.
Например, в beforeAll
вы создаете некоторых пользователей, а в afterAll
вы их удаляете.
Ответ 3
В основном вы дадите создать отдельную среду для тестирования сквозных тестов.
Где после каждого выполнения текста вам нужно перезагружать вашу базу данных сценарием сброса базы данных