如何在茉莉花测试中创建日期函数的间谍

时间:2016-11-10 19:52:52

标签: javascript jasmine

我有以下功能和规格。我在日期对象上创建了间谍,我在我的函数中传递和操作。但间谍不是在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");
});

1 个答案:

答案 0 :(得分:0)

您的代码存在一些错误。

  • 和&之间有一个逗号(,) returnValue,应该是 一个点(。)
  • 在Date对象中没有名为format的函数,我的chrome 当然没有提出任何方法
  • 您尚未使用 it 功能,这可能类似于 @Test in java(见下面的代码)
  • 回答你关于原型的评论,这也应该有用, 请用间谍的格式替换getHours来试试。

但是我嘲笑了方法for your reference and it works

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");
  })
});
  • FYI这里有一些js日期格式的information,它使用了 用于格式化的普通构造函数。
  • 出于好奇,我可以问你为什么要试试 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原型,我可以很简单 嘲笑中间函数,因此你可以重新分配它 你需要的时间。