用Jasmine模拟日期构造函数

时间:2014-10-02 00:32:51

标签: javascript mocking jasmine

我正在测试一个将日期作为可选参数的函数。我想声明如果在没有参数的情况下调用函数,则会创建一个新的Date对象。

var foo = function (date) {
  var d = date || new Date();
  return d.toISOString();
}

如何断言new Date被调用?

到目前为止,我有这样的事情:

it('formats today like ISO-8601', function () {
  spyOn(Date, 'prototype');
  expect().toHaveBeenCalled();
});

请参阅:https://github.com/pivotal/jasmine/wiki/Spies

5 个答案:

答案 0 :(得分:50)

来自茉莉花的例子,

jasmine.clock().install();
var baseTime = new Date(2013, 9, 23);
jasmine.clock().mockDate(baseTime);
jasmine.clock().tick(50)
expect(new Date().getTime()).toEqual(baseTime.getTime() + 50);


afterEach(function () {
    jasmine.clock().uninstall();
});

jasmine date

答案 1 :(得分:11)

归功于@HMR。测试我写的验证:

  it('Should spy on Date', function() {
    var oldDate = Date;
    spyOn(window, 'Date').andCallFake(function() {
      return new oldDate();
    });
    var d = new Date().toISOString;
    expect(window.Date).toHaveBeenCalled();
  });

答案 2 :(得分:7)

对我而言,它适用于:

spyOn(Date, 'now').and.callFake(function() {
    return _currdate;
  });

而不是.andCallFake(使用" grunt-contrib-jasmine":" ^ 0.6.5",似乎包含jasmine 2.0.0)

答案 3 :(得分:2)

这对我有用

var baseTime = new Date().getTime();
spyOn(window, 'Date').and.callFake(function() {
   return {getTime: function(){ return baseTime;}};
});

答案 4 :(得分:1)

对于使用Edge版 Jasmine 的用户:

it('Should spy on Date', function() {
    var oldDate = Date;

    // and.callFake
    spyOn(window, 'Date').and.callFake(function() {
        return new oldDate();
    });

    var d = new Date().toISOString;

    expect(window.Date).toHaveBeenCalled();
});