ruby-on-rails – 我如何设置postgres中的时间以使用RSpec测试时
发布时间:2020-12-17 02:21:40 所属栏目:百科 来源:网络整理
导读:我希望能够跨不同时区测试调度程序组件的行为.但是,触发调度行为的功能在postgres中使用基于时间的查询: 例如 # find reminders which have not been sent for "today" in the local dateSchedule.where('evening_reminder_last_sent_on_local_date != DATE
我希望能够跨不同时区测试调度程序组件的行为.但是,触发调度行为的功能在postgres中使用基于时间的查询:
例如 # find reminders which have not been sent for "today" in the local date Schedule.where('evening_reminder_last_sent_on_local_date != DATE( NOW() AT TIME ZONE time_zone )') 我希望能够在RSpec中测试这种行为并确保它在当天正常播放,并且如果我在12月25日凌晨1点发送一个日本用户提醒,然后在UTC时间晚上10点,他们提醒“今天”将显示为尚未发送(因为它是在日本的第二天早上7点左右). 但是,为了做到这一点,我需要能够在postgres中设置日期时间.这可能吗? 请注意……这不是关于存根Rails的时间 挑战不是在Rails中留出时间 – 我知道如何做到这一点.问题是如何设置Postgres的时间. 解决方法
Postgres使用底层操作系统的日期/时间设置(至少在类UNIX系统上).要设置各种时间戳,您必须使用date命令设置操作系统的时间.
我当然不会在一个重要的系统上推荐它. cronjobs可以运行乱七八糟和其他令人不快的副作用. 相反,将函数now()替换为用户定义的服务器端函数,如: CREATE OR REPLACE FUNCTION now_test() RETURNS timestamptz AS $func$SELECT '2013-12-01 12:34'::timestamptz$func$LANGUAGE SQL; (上面的演员假设会话的当前时区设置.或者,您可以使用文字提供时区或时间偏移.) Schedule.where('evening_reminder_last_sent_on_local_date != DATE(now_test() AT TIME ZONE time_zone)') 使用各种时间戳修改上面的上述SQL函数,你就可以了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |