Использование объектов данных во время E2E-тестирования с помощью Protractor

Итак, мы с коллегой обсуждали создание объекта данных для наших e2e-тестов. Насколько я понимаю объекты данных, они используются для разделения ваших наборов тестов. Например, мой первый набор тестов предназначен для создания учетной записи и проверки правильности полей, а второй набор тестов входит в учетную запись и выполняет свои собственные тесты. Мне сказали, что хорошо использовать объекты данных (не объект страницы) только в том случае, если первый набор тестов не пройден при создании учетной записи. Таким образом, мы можем использовать объект данных во втором наборе тестов, чтобы создать нового пользователя только для проверки входа в систему. Моя проблема в том, что если мой первый набор тестов не может создать учетную запись, почему создание учетной записи во втором наборе тестов должно пройти успешно? Какую бы ошибку я ни получил в первом наборе тестов, я должен получить и второй набор тестов, верно? У меня есть еще много вопросов об объектах данных и о том, как их использовать. Мне было интересно, может ли кто-нибудь объяснить объекты данных и как их использовать/писать.

    /***
    Test Data Object
***/

var Member = function() {
    var unixTime = String(Math.round(new Date()/1000));
    this.username = "TestAccount" + unixTime;
    this.email = this.username + "@gmail.com";
    this.password = "password";
};

Member.prototype.create = function () {
    var signup = new signupPage.Signup();
    signup.getPage();
    signup.memberAs(this.username, this.email, this.password);
};

Member.prototype.login = function () {
    var login = new loginPage.Login();
    login.getPage();
    login.memberAs(this.username, this.password);
};

Member.prototype.logout = function () {
    // k.logoutMember();
};

exports.Member = Member;

Это объект данных, который написал мой коллега. Мы не закончили писать тесты, потому что перестали об этом думать, но вот те тесты, которые у нас есть.

var chai = require('chai');
var chaiAsPromised = require("chai-as-promised");
var expect = chai.expect;
var member = require('./lib/test-data');

chai.use(chaiAsPromised);

describe.only('Member Account Settings and Information', function() {
    before(function () {
        member.create();
    });

    before.each(function() {
        member.login();
    });

    describe('My Account', function () {
        it('Logging in should enable the "My Account" link.', function() {
            member.login();
        });

        it('Clicking on "My Account" should expand the account options', function() {
        });
    });

person Frank    schedule 25.02.2015    source источник
comment
Приведите пример объекта данных и его использования. Спасибо.   -  person alecxe    schedule 25.02.2015
comment
Итак, вот объект данных, который у нас есть. Мы пытаемся использовать его для создания нового пользователя перед всеми тестами, но я создавал одного пользователя и использовал эту учетную запись для всех своих тестов. Это связано с эхо-вопросом, который я задал ранее, который вы прокомментировали.   -  person Frank    schedule 25.02.2015
comment
Это мой любимый ответ на эту тему: thoughtworks.com /информация/блог/   -  person Isaac Lyman    schedule 26.02.2015
comment
Да, объекты страницы помогают, и у нас их несколько, но я пытаюсь узнать об объектах данных. Я гуглил и ничего толком про них не нашел. Насколько я понимаю, объекты данных похожи на объекты страницы, но не совсем такие же.   -  person Frank    schedule 26.02.2015


Ответы (1)


Я использую хэши для своих объектов данных. Вот пример из моего кода protractor_example на GitHub.

Учитывая файл данных:

var UserData = function() {
    this.testUser = {'username': 'test', 'password': 'test'};
};
module.exports = new UserData();

Потом спец...

describe ('non-angular login test', function() {
    var loginPage = require('../pages/nonAngularLoginPage.js');
    var userData = require('../data/userData.js');

    it('should goto friend pages on successful login', function() {
        loginPage.loginAs(userData.testUser);

        expect(browser.getTitle()).toContain('Angular JS Demo');
    });
});
person Brine    schedule 25.02.2015
comment
Итак, в этом случае вы используете одного и того же пользователя для всех своих наборов тестов? - person Frank; 03.03.2015
comment
В этом примере да, но вы можете добавить любое количество дополнительных пользователей в UserData. Например. у вас также может быть this.admin, или this.userNoWigets, или this.guestUser и т. д. Если это поможет тесту, я мог бы также использовать var для указания роли. Например. var admin = userData.tom;, а затем используйте его: loginPage.loginAs(admin);. Это повышает удобочитаемость и помогает документировать тест (т. е. вы знаете, что этот тест ожидает администратора). - person Brine; 03.03.2015