【问题标题】:Test a function which contains current time in its return value using jasmine使用 jasmine 测试返回值中包含当前时间的函数
【发布时间】:2019-12-31 14:13:14
【问题描述】:

我正在测试一个返回对象的函数。其中一个键的值是以毫秒为单位的当前时间。 我们如何使用 jasmine 对其进行测试?

var fun = function(name,id){
    var obj = {
        name : name,
        id : id,
        createdTime : Date.now()
    }
    return obj;
}

expect(fun("abc",1)).toBe({name:"abc",id:1,createdTime:Date.now()})

Date.now() 返回 2 个不同的值,因为主函数和测试用例都在不同的时间运行。

【问题讨论】:

    标签: javascript jasmine


    【解决方案1】:

    根据您需要的具体程度,您可以使用 toBeWithinRangeJasmine Matchers 包中创建 +-1 秒或类似数字的范围:

    expect(createdTime).toBeWithinRange(Date.now() - 1000, Date.now() + 1000)
    

    使用这种方法,您必须将createdTime 与其他测试分开测试,但这应该不是什么大问题。您只需将所需的返回属性分配给变量createdTime

    编辑- 使用toBeNear

    expect(createdTime).toBeNear(Date.now(), 2);
    

    如果分配给 createdTime 的日期在测试运行日期的两秒内,则会出现这种情况。

    Edit 2-在测试时排除对象键,您可以按照示例here。在你的情况下,你会这样做:

    var joc = jasmine.objectContaining;
    expect(fun("abc",1))
    .toEqual(joc({
        name:"abc",
        id:1
    }));
    

    【讨论】:

    • 在测试对象时有没有办法从对象中排除 createdTime 键?
    • @Vish 看到我回答的第二次更新。应该回答你的问题
    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多