如何在茉莉花测试中创建一个监视日期的函数

How to create a spy on Date functions in jasmine testing

本文关键字:一个 监视 日期 函数 茉莉花 测试 创建      更新时间:2023-09-26

我有以下函数和规范。我已经创建了spy on date对象,我在我的函数中传递和操作。但是spy不是在rightDate上创建的。你们能帮我解决这个问题吗?

 var jasmineFunc = new function(leftDate, rightDate){
    var leftDateFormat= leftDate.format("H:mm");
    rightDate= new Date(rightDate- 60000);
    var rightDateFormat = rightDate.format("H:mm");
    }
Spec:
describe("format", function(){
   var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
  var rightDate= new Date(2016, 0, 1, 2, 0, 0, 0);
   spyOn(leftDate,"format").and,returnValue("00:00");
   spyOn(rightDate, "format").and.returnValue("00:59");
});

你的代码有几个错误。

  • 和& &之间有逗号(,);returnValue,它应该是点(.)
  • 在日期对象中没有称为格式的函数,我的chrome当然没有建议任何这样的方法
  • 您没有使用it函数,该函数可能类似于java中的@Test(见下面的代码)
  • 回答你关于原型的评论,这应该也能工作,请将getHours替换为spy上的format。

然而,我已经嘲笑了一个方法供您参考,它的工作

var jasmineFunc = function(leftDate, rightDate) {
  var leftDateFormat = leftDate.format("H:mm");
  rightDate = new Date(rightDate - 60000);
  var rightDateFormat = rightDate.format("H:mm");
}
Date.prototype.format = function() {
 return "This formats the text";
}

describe("format", function() {
 it('tempSpec', function() {
  var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
  var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0);
  spyOn(leftDate, "getHours").and.returnValue("00:00");
  spyOn(rightDate, "getHours").and.returnValue("00:59");
  spyOn(leftDate, "format").and.returnValue("I've hijacked it in the spy");
  var dt = leftDate.getHours()
  var txt = leftDate.format()
  expect(dt).toEqual("00:00");
  expect(txt).toEqual("I've hijacked it in the spy");
  })
});
  • 仅供参考这里有一些关于js日期格式的更多信息,它使用
  • 也是出于好奇,我可以问你为什么你想测试一个API代码,你应该测试你自己的代码,因为那些API已经过彻底测试

这是一个更新版本的代码,我想我终于明白你的意思对象被改变了,它被重新分配。那么是什么改变了呢?

var jasmineFunc = {
  testFunc: function(leftDate, rightDate) {
    var leftDateFormat = this.formatFunc(leftDate);
    rightDate = new Date(rightDate - 60000);
    var rightDateFormat = this.formatFunc(rightDate);
    return {'left' : leftDateFormat, 'right' : rightDateFormat}
  },
  formatFunc: function(value) {
    return value.format("H:mm")
  }
}
Date.prototype.format = function() {
  return "This formats the text";
}

describe("format Spec", function() {
  it('tempSpec', function() {
    var leftDate = new Date(2016, 0, 1, 0, 0, 0, 0);
    var rightDate = new Date(2016, 0, 1, 2, 0, 0, 0);
    spyOn(jasmineFunc, "formatFunc").and.returnValue("Some arbitrary Value");
        var testObj = jasmineFunc.testFunc(leftDate, rightDate);
        expect(testObj.left).toEqual("Some arbitrary Value");
        expect(testObj.right).toEqual("Some arbitrary Value");
  });
});
  • 由于您正在重用变量,所以我将格式委托给另一个函数,这样我就可以根据我的需求模拟它。
  • 注意,我不再需要模拟Date原型,我可以简单模拟中间函数,因此您可以将其重新分配你需要多少次都行。