使用 Protractor 进行 E2E 测试时使用数据对象
Using Data Objects while E2E testing with Protractor
所以我和一位同事正在讨论为我们的 e2e 测试制作一个数据对象。根据我对数据对象的理解,它们用于解耦您的测试套件。例如,我的第一个测试套件是创建一个帐户并测试字段是否有效,第二个测试套件登录到该帐户并进行自己的测试。有人告诉我最好使用数据对象(而不是页面对象),以防万一创建帐户时第一个测试套件失败。这样我们就可以使用第二个测试套件中的数据对象来创建一个新用户来测试登录。我的问题是,如果我的第一个测试套件无法创建帐户,为什么在我的第二个测试套件中创建帐户会通过?无论我在第一个测试套件中遇到什么错误,我也应该进入第二个测试套件,对吗?我还有很多关于数据对象以及如何使用它们的问题。我想知道是否有人可以解释数据对象以及如何 use/write 一个。
/***
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() {
});
});
我对我的数据对象使用哈希。这是 example from my protractor_example code on 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');
});
});
所以我和一位同事正在讨论为我们的 e2e 测试制作一个数据对象。根据我对数据对象的理解,它们用于解耦您的测试套件。例如,我的第一个测试套件是创建一个帐户并测试字段是否有效,第二个测试套件登录到该帐户并进行自己的测试。有人告诉我最好使用数据对象(而不是页面对象),以防万一创建帐户时第一个测试套件失败。这样我们就可以使用第二个测试套件中的数据对象来创建一个新用户来测试登录。我的问题是,如果我的第一个测试套件无法创建帐户,为什么在我的第二个测试套件中创建帐户会通过?无论我在第一个测试套件中遇到什么错误,我也应该进入第二个测试套件,对吗?我还有很多关于数据对象以及如何使用它们的问题。我想知道是否有人可以解释数据对象以及如何 use/write 一个。
/***
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() {
});
});
我对我的数据对象使用哈希。这是 example from my protractor_example code on 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');
});
});