web-dev-qa-db-ja.com

ジャスミンを使用したモック日付コンストラクター

オプションの引数として日付を取る関数をテストしています。引数なしで関数が呼び出された場合、新しい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

24
Rimian

@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();
  });
11
Gordon Bockus

ジャスミンの例から、

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();
});

ジャスミンの日付

56
Anatoli Klamer

私にとっては:

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

の代わりに .andCallFake(「grunt-contrib-jasmine」を使用:「^ 0.6.5」、ジャスミン2.0.0を含むようです)

7
cesarpachon

これは私のために働いた

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

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();
});
1
Jeff Tian