你如何使用Jasmine BDD冻结/伪造时间

时间:2012-01-05 20:20:48

标签: javascript bdd jasmine

我的代码

中有这样的一行
new Date().getFullYear();

我需要它总是在同一年返回。

有没有办法用Jasmine做到这一点?

感谢。

2 个答案:

答案 0 :(得分:18)

在JavaScript中,您只需覆盖测试设置中的功能:

Date.prototype.getFullYear = function(){return 2012}

您还可以使用jasmine spy

spyOn(Date, 'getFullYear').andReturn(2012)

另一种方法是将日期插入您想要测试的功能中。这是顺便说一句。编写可测试代码的最佳方法。不要在函数中创建新实例,因为您不仅要开始测试代码,还要测试此实例。

答案 1 :(得分:2)

Sinon.js假冒计时器。

http://sinonjs.org/docs/#clock

我在Node.js中使用这个在我的规格中构建了一个鼓机来检查时序码。但是我也在另一个项目上工作过,在那个唯一可以让我成为我想要的那一年的方法是使用一个特定年份,我认为1969年出于某种原因。我猜这是Unix时代的开始。

无论如何,差不多一年前,所以他们现在可能已经解决了这个问题。