让我们说我有两个功能
var now = new Date();
var oneDayAgo = now.getTime() - (24 * 60 * 60 * 1000);
var beforeOneDay = [];
var otherEvents = [];
var assignTimeSlots = function(time) {
if (time < oneDayAgo)
beforeOneDay.push(time)
else
otherEvents.push(time)
}
使用茉莉花测试时间的好方法是什么?
答案 0 :(得分:0)
您的挑战
我认为您真正感兴趣的是测试assignTimeSlots
函数。给你带来挑战的是它取决于函数外定义的全局oneDayAgo
变量。这意味着您的测试,并且代码都依赖于该全局字段,这使得事情变得具有挑战性,尤其是当它使用当前时间时,每次运行测试时都会更改。
依赖注入
您可以通过将该变量作为参数注入函数来解决此问题。这允许您控制测试中的当前时间。您不再与系统时钟耦合。
示例强>
以下是未经测试的,但应该明白......
var assignTimeSlots = function(oneDayAgo, time) {
if (time < oneDayAgo)
beforeOneDay.push(time)
else
otherEvents.push(time)
}
it ('should be added to "beforeOneDay" if it is prior to yesterday', function() {
var oneDayAgo = new Date(2017, 1, 27, 13, 35);
var now = new Date(2017, 1, 28, 13, 36);
assignTimeSlots(now, oneDayAgo);
expect(beforeOneDay[0]).toBe(now);
expect(otherEvents.length).toBe(0);
});