量角器:检查数据按日期排序
Protractor: Checking data is sorted by date
我需要检查返回的数据是否按日期排序。我是这样写的:
it('should be sorted by date', function() {
element.all(by.repeater('users in group.users')).then(
function(users) {
var lastUser = users[0].element(by.id('birth-date')).getText();
for (var i = 1; i < users.length; ++i) {
var currentUser = users[i].element(by.id('birth-date')).getText();
expect(moment(currentApplication).format('MMM d, YYYY HH:mm')).toBeGreaterThan(moment(lastApplication).format('MMM d, YYYY HH:mm'));
lastUser = currentUser;
}
}
)
})
返回:
Expected 'Jan 1, 2015 00:00' to be greater than 'Jan 1, 2015 00:00'.
我做错了什么? currentUser 和 lastUser 似乎是对象而不是文本...但我不确定为什么。
使用 map()
获取所有出生日期的列表,将字符串列表转换为日期列表并与同一数组的排序版本进行比较:
element.all(by.id('birth-date')).map(function (elm) {
return elm.getText().then(function (text) {
return new Date(text);
});
}).then(function (birthDates) {
// get a copy of the array and sort it by date (reversed)
var sortedBirthDates = birthDates.slice();
sortedBirthDates = sortedBirthDates.sort(function(date1, date2) {
return date2.getTime() - date1.getTime()
});
expect(birthDates).toEqual(sortedBirthDates);
});
我对这个话题做了一个小小的研究。我的代码是:
element.all(by.id('birth-date')).map(function (elm) {
return elm.getText();
}).then(function (birthDates) {
var sortedbirthDates = birthDates.slice();
sortedbirthDates = sortedbirthDates.sort(function compareNumbers(a, b) {
if (a > b) {
return 1;
} });
expect(birthDates).toEqual(sortedbirthDates);
});
这里我们独立于值类型。我们可以将它用于数字、字符串和日期。
TS:
1) strArr = (elems) => elems.map(async elem => await elem.getText());
2) strToNum = (strArr) => strArr.map(Date.parse);
3) const ordering = {
isASC: (data: number[]) => data.every((item, i, arr) => !i || arr[i-1] <= item),
isDESC: (data: number[]) => data.every((item, i, arr) => !i || arr[i-1] >= item)
}
OR
const ordering = {
isASC: (data: number[]) => data.slice(1).every((item, i) => data[i] <= item),
isDESC: (data: number[]) => data.slice(1).every((item, i) => data[i] >= item)
}
我需要检查返回的数据是否按日期排序。我是这样写的:
it('should be sorted by date', function() {
element.all(by.repeater('users in group.users')).then(
function(users) {
var lastUser = users[0].element(by.id('birth-date')).getText();
for (var i = 1; i < users.length; ++i) {
var currentUser = users[i].element(by.id('birth-date')).getText();
expect(moment(currentApplication).format('MMM d, YYYY HH:mm')).toBeGreaterThan(moment(lastApplication).format('MMM d, YYYY HH:mm'));
lastUser = currentUser;
}
}
)
})
返回:
Expected 'Jan 1, 2015 00:00' to be greater than 'Jan 1, 2015 00:00'.
我做错了什么? currentUser 和 lastUser 似乎是对象而不是文本...但我不确定为什么。
使用 map()
获取所有出生日期的列表,将字符串列表转换为日期列表并与同一数组的排序版本进行比较:
element.all(by.id('birth-date')).map(function (elm) {
return elm.getText().then(function (text) {
return new Date(text);
});
}).then(function (birthDates) {
// get a copy of the array and sort it by date (reversed)
var sortedBirthDates = birthDates.slice();
sortedBirthDates = sortedBirthDates.sort(function(date1, date2) {
return date2.getTime() - date1.getTime()
});
expect(birthDates).toEqual(sortedBirthDates);
});
我对这个话题做了一个小小的研究。我的代码是:
element.all(by.id('birth-date')).map(function (elm) {
return elm.getText();
}).then(function (birthDates) {
var sortedbirthDates = birthDates.slice();
sortedbirthDates = sortedbirthDates.sort(function compareNumbers(a, b) {
if (a > b) {
return 1;
} });
expect(birthDates).toEqual(sortedbirthDates);
});
这里我们独立于值类型。我们可以将它用于数字、字符串和日期。
TS:
1) strArr = (elems) => elems.map(async elem => await elem.getText());
2) strToNum = (strArr) => strArr.map(Date.parse);
3) const ordering = {
isASC: (data: number[]) => data.every((item, i, arr) => !i || arr[i-1] <= item),
isDESC: (data: number[]) => data.every((item, i, arr) => !i || arr[i-1] >= item)
}
OR
const ordering = {
isASC: (data: number[]) => data.slice(1).every((item, i) => data[i] <= item),
isDESC: (data: number[]) => data.slice(1).every((item, i) => data[i] >= item)
}