Использование объектов данных при тестировании 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() {
        });
    });

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');
    });
});
Другие вопросы по тегам