【问题标题】:Protractor: testing date text with various formats量角器:测试各种格式的日期文本
【发布时间】:2015-01-07 13:25:50
【问题描述】:

HTML:

<div id="date"> {{date | date : 'EEE MMM d HH:mm'}} </div>

它显示在“Tue Sep 30 10:45”的屏幕上

测试:

expect(element(by.id('date')).getText()).toBe("Tue Sept 30 10:45");

失败:

预计 'Sep 30, 2014 10:45' 为 'Tue Sep 30 10:45'。

【问题讨论】:

    标签: angularjs testing protractor end-to-end


    【解决方案1】:

    我认为您需要比较 Date 对象,而不是字符串:

    element(by.id('date')).getText().then(function (value) {
        var dateValue = new Date(value);
        var expectedDateValue = new Date(dateValue.getFullYear(), 9, 30, 10, 45, 0);
    
        expect(dateValue).toBe(expectedDateValue);
    });
    

    如果你想额外检查格式,你可以潜入正则表达式的奇妙世界,或者直接使用moment.js 库:

    element(by.id('date')).getText().then(function (value) {
        expect(moment(value, ["EEE MMM d HH:mm"]).isValid()).toBe(true);
    }
    

    【讨论】:

    • 谢谢,但我想比较数据的值和格式。如果有人将格式更改为其他格式,则测试应该失败。这就是为什么我尝试通过字符串来做。
    • 第一个选项很奇怪。它正在返回:“预期日期(2001 年 9 月 30 日星期日 10:45:00 GMT+0100 (BST))” 在屏幕上,它显示 2014...为什么显示 2001?数据库中的日期是 2014 年,当我将 html 更改为显示 yyyy 时是 2014 年。
    • 我认为是因为它不显示年份,所以'getText()'不能正常工作。
    • @Jason 好的,已更新 - 将预期日期的年份设置为解析日期的年份(我认为这里可以,因为年份并不重要)。请检查。
    【解决方案2】:

    https://momentjs.com/ 这是一个非常好的库,有助于根据所需格式更改日期值

    moment().format('MMMM Do YYYY, h:mm:ss a'); // September 1st 2017, 6:56:48 pm
    moment().format('dddd');                    // Friday
    moment().format("MMM Do YY");               // Sep 1st 17
    moment().format('YYYY [escaped] YYYY');     // 2017 escaped 2017
    moment().format();                         
    

    angular.mock.TzDate 是 angular 的原生替代品。这是 angular mocks 的助手,真正保护您的测试免受系统时区或任何其他依赖项的影响

    https://docs.angularjs.org/api/ngMock/type/angular.mock.TzDate

    这很适合茉莉花或摩卡咖啡,可以用量角器棒打

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多