javascript - Mock only today's date in Jasmine unit test -
i writing jasmine unit test function in dates compared. want provide fake date used today's date. therefore spying on date method on window object , returning predefined date.
this works fine, in function i'm testing, reading dates string , calling new date(yyyy, mm, dd) turn them dates. when occurs, these values replaced mock date provided.
here's example:
var checkdate = function () { return { today: new date(), anotherday: new date(2016, 0, 1) } }; var createdate = function (year, month, date) { var overridedate = new date(year, month, date); spyon(window, 'date').andcallfake(function () { return overridedate; }) } var dates; describe("checkdate", function() { beforeeach(function() { createdate(2015, 11, 1); dates = checkdate(); }) it("today has value of 12/1/2015", function() { expect(dates.today.tolocaledatestring()).tobe('12/1/2015'); }); it("anotherday has value of 1/1/2016", function() { expect(dates.anotherday.tolocaledatestring()).tobe('1/1/2016'); }) }); here's jsfiddle example of issue.
how can mock today's date, , allow new date(yyyy, mm, dd) create proper date object? expect both tests in fiddle pass, i.e. anotherday set 1/1/2016 , today set 12/1/2015.
karma-jasmine v 0.1.6.
you can cache window.date use when arguments passed mock
var windowdate = window.date; spyon(window, 'date').andcallfake(function (year,month,day) { if(year != undefined && month != undefined && day != undefined){ return new windowdate(year,month,day); } return overridedate; })
Comments
Post a Comment