【问题标题】:Protractor: Checking data is sorted by date量角器:检查数据按日期排序
【发布时间】:2015-01-05 14:53:42
【问题描述】:

我需要检查返回的数据是否按日期排序。我是这样写的:

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 似乎是对象而不是文本......但我不知道为什么。

【问题讨论】:

    标签: javascript angularjs testing protractor end-to-end


    【解决方案1】:

    使用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);
    });
    

    【讨论】:

    • 我得到这个:TypeError: Object [object Object] has no method 'all'
    • @Jason 哎呀,错字,已修复 :)
    • 谢谢。我是新手,所以语法对我来说很重要 :) 还有一个,现在得到这个:TypeError: Object [object Object] has no method 'sort'
    • 另外,有没有反向排序?
    • 天哪!我试图用标准量角器方法对我的数组进行排序,结果太糟糕了!非常感谢。=)
    【解决方案2】:

    我对这个话题做了一个小的研究。我的代码是:

    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);                                                        
        });
    

    这里我们独立于值类型。我们可以将它用于数字、字符串和日期。

    【讨论】:

      【解决方案3】:
      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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        • 2021-01-12
        • 2021-09-10
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        相关资源
        最近更新 更多