javascript - 在 PhantomJS 中模拟时区以进行 Jasmine 测试

标签 javascript unit-testing date jasmine phantomjs

是否可以在 Jasmine 中模拟时区来测试日期对象?

我有一个函数,它接受 UTC 时间字符串并将其转换为日期对象。

使用“2016-01-16T07:29:59+0000”,我希望能够验证当我们处于太平洋标准时间时我们正在观察 2016-01-15 23:29:59 作为本地日期/时间

我希望能够将此时区切换回 GMT,然后确保我们将 2016-01-16 07:29:59 视为本地日期/时间

(如何)这可能吗? (我正在使用 phantomjs 通过 Grunt 运行我的 Jasmine 规范)

我的函数供引用:

utcDateStringToDateObject: function(dateString){
    return dateString.indexOf('+')>-1 ? new Date(dateString.split('+')[0]) : new Date(dateString);
}

最佳答案

我正在使用 jasmine 3.4.0,一种解决方案是使用时钟

    beforeEach(() => {
        jasmine.clock().install();
        // whenever new Date() occurs return the date below
        jasmine.clock().mockDate(new Date('2024-04-08T06:40:00'));
    });

    afterEach(() => {
        jasmine.clock().uninstall();
    });

但是,由于我的测试包括时区,我不得不监视我的服务

it('should support work', () => {
        const mocked = moment.tz('2019-03-27 10:00:00', 'America/New_York');
        spyOn(spectator.service, 'getMoment').and.returnValue(mocked);
        const output = spectator.service.foo('bar');
        // My asserts
        expect(output.start.format(dateFormat)).toBe('2019-03-17T00:00:00-04:00');
        expect(output.end.format(dateFormat)).toBe('2019-03-23T23:59:59-04:00');
    });

关于javascript - 在 PhantomJS 中模拟时区以进行 Jasmine 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945108/

相关文章:

javascript - 为什么我的 Jasmine 规范认为我的 Angular 模块未定义

mysql - 是否有 MySQL 设置在应用于 "time"列时忽略日期时间常量的 "DATE"部分?

java - 简单的 Android/Java 倒计时应用程序

javascript - 在 react 中按换行符拆分字符串

javascript - 使用动态键获取 react 状态

c# - 将复杂参数传递给 [Theory]

unit-testing - OCaml 使用异步编写超时函数

javascript - emscripten 在 C 中读取 javascript arrayBuffer

javascript - 不使用 flash 的多张图片上传

mysql - 具有日期条件的 MySQL 触发器的正确​​语法/格式