【问题标题】:How to unit test cookie expiration in Karma / Jasmine / Phantom JS如何在 Karma / Jasmine / Phantom JS 中对 cookie 过期进行单元测试
【发布时间】:2017-08-23 17:16:48
【问题描述】:

我正在为一个简单的 javascript 编写单元测试...

  • 业力 v1.5.0
  • 茉莉花v2.5.3
  • PhantomJS v2.1.14

我正在尝试编写测试以确保 cookie 获得正确的到期日期(30 天)。最新版本的 Jasmine 支持使用 jasmine.clock() 伪造时间流逝,但这似乎不适用于 cookie 过期...

describe("cookies...", function () {

    it("expire after 30 days", function () {

        jasmine.clock().install();

        set_a_cookie_to_expire_in_30_days();

        jasmine.clock().tick(29 *24*60*60*1000); //fast forward 29 days

        expect(check_cookie()).toBeTruthy();

        jasmine.clock().tick(2 *24*60*60*1000); //fast forward another 2 days

        expect(check_cookie()).toBeFalsy(); //THIS FAILS

        jasmine.clock().uninstall();
    });

});

第二个expect() 失败。我做错了什么?

【问题讨论】:

    标签: javascript unit-testing cookies phantomjs karma-jasmine


    【解决方案1】:

    Jasmine 时钟tick 实际上不会影响浏览器中的时间传递。它只会执行 setTimeouts 或 setIntervals 的回调。

    来自他们的文档:

    Jasmine Clock 可用于需要能够使用 setTimeout 或 setInterval 回调的测试套件。它使计时器回调同步,仅在时钟及时向前计时时执行注册的函数。这使得与计时器相关的代码更容易测试。

    您应该改用mockDate

    jasmine.clock().mockDate(
      new Date(2018, 5, 11)
    );
    

    如果您提前 29 天打勾,您只需提前 29 天再次mockDate。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多