Транспортер 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

В основном вы дадите создать отдельную среду для тестирования сквозных тестов.

Где после каждого выполнения текста вам нужно перезагружать вашу базу данных сценарием сброса базы данных