Node.js 如何使用jasmine节点监视日期

Node.js 如何使用jasmine节点监视日期,node.js,jasmine,Node.js,Jasmine,根据官方文件中给出的例子 它报告jasmine.clock不是一个函数。我在我的项目中使用了以下依赖项 "devDependencies": { "jasmine": "^2.5.2", "jasmine-node": "^1.14.5" } 我还试图模拟Date对象。但由于我在节点中而不是在浏览器上,所以我没有找到/获取窗口来模拟任何方法。首先需要安装 然后进行如下测试: describe("Mocking the Date object", function ()

根据官方文件中给出的例子

它报告jasmine.clock不是一个函数。我在我的项目中使用了以下依赖项

  "devDependencies": {
    "jasmine": "^2.5.2",
    "jasmine-node": "^1.14.5"
  }
我还试图模拟Date对象。但由于我在节点中而不是在浏览器上,所以我没有找到/获取
窗口来模拟任何方法。

首先需要安装
然后进行如下测试:

describe("Mocking the Date object", function () {
    it("mocks the Date object and sets it to a given time", function () {
        var baseTime = new Date(2013, 9, 23);
        jasmine.clock().install();
        jasmine.clock().mockDate(baseTime);

        jasmine.clock().tick(50);
        expect(new Date().getTime()).toEqual(baseTime.getTime() + 50);        
    });
});

希望能有所帮助。

我发现我在使用非官方的茉莉花图书馆。所以我应该使用“jasmine核心”而不是“jasmine节点”来获得最新jasmine版本的支持。然而,它仍然未能模拟日期

所以我分离了一个函数来返回日期。然后,

  • 我导出了该函数,以便可以对其进行模拟。我使用jasmine的
    spyOn
    模拟日期函数的行为
  • 我发现了一个npm库
    rewire
    ,它有助于访问nodejs模块的私有变量或方法。因此,它也可以用来
    spyOn
    date函数,而不是仅仅因为模仿而导出它

  • 链接的npm包声明(重点是mine):“Jasmine v1.3的模拟日期。对于v2.x,使用Jasmine.clock().mockDate()。”正如我所说的Jasmine版本,我希望
    Jasmine.clock()
    应该可用。
    describe("Mocking the Date object", function () {
        it("mocks the Date object and sets it to a given time", function () {
            var baseTime = new Date(2013, 9, 23);
            jasmine.clock().install();
            jasmine.clock().mockDate(baseTime);
    
            jasmine.clock().tick(50);
            expect(new Date().getTime()).toEqual(baseTime.getTime() + 50);        
        });
    });